From a895b6396a2ad68914c36d68ade2abda134db190 Mon Sep 17 00:00:00 2001 From: Rooholla-KhorramBakht Date: Fri, 9 Feb 2024 01:47:33 +0800 Subject: [PATCH] ros2 bridge added. --- .../dds_bridge}/CMakeLists.txt | 0 .../dds_bridge}/include/go2py/Imu.cpp | 0 .../dds_bridge}/include/go2py/Imu.hpp | 0 .../dds_bridge}/include/go2py/LowCmd.cpp | 0 .../dds_bridge}/include/go2py/LowCmd.hpp | 0 .../dds_bridge}/include/go2py/LowState.cpp | 0 .../dds_bridge}/include/go2py/LowState.hpp | 0 .../include/unitree/common/any.hpp | 0 .../include/unitree/common/assert.hpp | 0 .../include/unitree/common/block_queue.hpp | 0 .../unitree/common/dds/dds_callback.hpp | 0 .../unitree/common/dds/dds_easy_model.hpp | 0 .../include/unitree/common/dds/dds_entity.hpp | 0 .../include/unitree/common/dds/dds_error.hpp | 0 .../unitree/common/dds/dds_exception.hpp | 0 .../unitree/common/dds/dds_factory_model.hpp | 0 .../include/unitree/common/dds/dds_native.hpp | 0 .../unitree/common/dds/dds_parameter.hpp | 0 .../include/unitree/common/dds/dds_qos.hpp | 0 .../unitree/common/dds/dds_qos_parameter.hpp | 0 .../unitree/common/dds/dds_qos_policy.hpp | 0 .../common/dds/dds_qos_policy_parameter.hpp | 0 .../unitree/common/dds/dds_qos_realize.hpp | 0 .../unitree/common/dds/dds_topic_channel.hpp | 0 .../include/unitree/common/dds/dds_traits.hpp | 0 .../include/unitree/common/decl.hpp | 0 .../include/unitree/common/error.hpp | 0 .../include/unitree/common/exception.hpp | 0 .../unitree/common/filesystem/directory.hpp | 0 .../unitree/common/filesystem/file.hpp | 0 .../unitree/common/filesystem/filesystem.hpp | 0 .../include/unitree/common/json/json.hpp | 0 .../unitree/common/json/json_config.hpp | 0 .../include/unitree/common/json/jsonize.hpp | 0 .../include/unitree/common/lock/lock.hpp | 0 .../include/unitree/common/log/log.hpp | 0 .../include/unitree/common/log/log_buffer.hpp | 0 .../include/unitree/common/log/log_decl.hpp | 0 .../include/unitree/common/log/log_initor.hpp | 0 .../include/unitree/common/log/log_keeper.hpp | 0 .../include/unitree/common/log/log_logger.hpp | 0 .../include/unitree/common/log/log_policy.hpp | 0 .../include/unitree/common/log/log_store.hpp | 0 .../include/unitree/common/log/log_writer.hpp | 0 .../dds_bridge}/include/unitree/common/os.hpp | 0 .../service/base/service_application.hpp | 0 .../common/service/base/service_base.hpp | 0 .../common/service/base/service_config.hpp | 0 .../common/service/base/service_decl.hpp | 0 .../unitree/common/service/dds_service.hpp | 0 .../unitree/common/socket/domain_socket.hpp | 0 .../include/unitree/common/socket/socket.hpp | 0 .../include/unitree/common/string_tool.hpp | 0 .../include/unitree/common/thread/future.hpp | 0 .../common/thread/recurrent_thread.hpp | 0 .../include/unitree/common/thread/thread.hpp | 0 .../unitree/common/thread/thread_decl.hpp | 0 .../unitree/common/thread/thread_pool.hpp | 0 .../unitree/common/thread/thread_task.hpp | 0 .../include/unitree/common/time/sleep.hpp | 0 .../include/unitree/common/time/time_tool.hpp | 0 .../include/unitree/idl/go2/AudioData_.hpp | 0 .../include/unitree/idl/go2/BmsCmd_.hpp | 0 .../include/unitree/idl/go2/BmsState_.hpp | 0 .../unitree/idl/go2/ConfigChangeStatus_.hpp | 0 .../include/unitree/idl/go2/Error_.hpp | 0 .../unitree/idl/go2/Go2FrontVideoData_.hpp | 0 .../include/unitree/idl/go2/HeightMap_.hpp | 0 .../include/unitree/idl/go2/IMUState_.hpp | 0 .../unitree/idl/go2/InterfaceConfig_.hpp | 0 .../include/unitree/idl/go2/LidarState_.hpp | 0 .../include/unitree/idl/go2/LowCmd_.cpp | 0 .../include/unitree/idl/go2/LowCmd_.hpp | 0 .../include/unitree/idl/go2/LowState_.hpp | 0 .../include/unitree/idl/go2/MotorCmd_.hpp | 0 .../include/unitree/idl/go2/MotorState_.hpp | 0 .../include/unitree/idl/go2/PathPoint_.hpp | 0 .../include/unitree/idl/go2/Req_.hpp | 0 .../include/unitree/idl/go2/Res_.hpp | 0 .../include/unitree/idl/go2/SportModeCmd_.hpp | 0 .../unitree/idl/go2/SportModeState_.hpp | 0 .../include/unitree/idl/go2/TimeSpec_.hpp | 0 .../include/unitree/idl/go2/UwbState_.hpp | 0 .../include/unitree/idl/go2/UwbSwitch_.hpp | 0 .../unitree/idl/go2/WirelessController_.hpp | 0 .../include/unitree/idl/ros2/Header_.hpp | 0 .../include/unitree/idl/ros2/MapMetaData_.hpp | 0 .../unitree/idl/ros2/OccupancyGrid_.hpp | 0 .../include/unitree/idl/ros2/Odometry_.hpp | 0 .../include/unitree/idl/ros2/Point32_.hpp | 0 .../include/unitree/idl/ros2/PointCloud2_.hpp | 0 .../include/unitree/idl/ros2/PointField_.hpp | 0 .../unitree/idl/ros2/PointStamped_.hpp | 0 .../include/unitree/idl/ros2/Point_.hpp | 0 .../include/unitree/idl/ros2/Pose2D_.hpp | 0 .../include/unitree/idl/ros2/PoseStamped_.hpp | 0 .../idl/ros2/PoseWithCovarianceStamped_.hpp | 0 .../unitree/idl/ros2/PoseWithCovariance_.hpp | 0 .../include/unitree/idl/ros2/Pose_.hpp | 0 .../unitree/idl/ros2/QuaternionStamped_.hpp | 0 .../include/unitree/idl/ros2/Quaternion_.hpp | 0 .../include/unitree/idl/ros2/String_.hpp | 0 .../include/unitree/idl/ros2/Time_.hpp | 0 .../unitree/idl/ros2/TwistStamped_.hpp | 0 .../idl/ros2/TwistWithCovarianceStamped_.hpp | 0 .../unitree/idl/ros2/TwistWithCovariance_.hpp | 0 .../include/unitree/idl/ros2/Twist_.hpp | 0 .../include/unitree/idl/ros2/Vector3_.hpp | 0 .../robot/b2/back_video/back_video_api.hpp | 0 .../robot/b2/back_video/back_video_client.hpp | 0 .../robot/b2/back_video/back_video_error.hpp | 0 .../unitree/robot/b2/config/config_api.hpp | 0 .../unitree/robot/b2/config/config_client.hpp | 0 .../unitree/robot/b2/config/config_error.hpp | 0 .../robot/b2/front_video/front_video_api.hpp | 0 .../b2/front_video/front_video_client.hpp | 0 .../b2/front_video/front_video_error.hpp | 0 .../motion_switcher/motion_switcher_api.hpp | 0 .../motion_switcher_client.hpp | 0 .../motion_switcher/motion_switcher_error.hpp | 0 .../robot/b2/robot_state/robot_state_api.hpp | 0 .../b2/robot_state/robot_state_client.hpp | 0 .../b2/robot_state/robot_state_error.hpp | 0 .../unitree/robot/b2/sport/sport_api.hpp | 0 .../unitree/robot/b2/sport/sport_client.hpp | 0 .../unitree/robot/b2/sport/sport_error.hpp | 0 .../unitree/robot/channel/channel_factory.hpp | 0 .../unitree/robot/channel/channel_labor.hpp | 0 .../unitree/robot/channel/channel_namer.hpp | 0 .../robot/channel/channel_publisher.hpp | 0 .../robot/channel/channel_subscriber.hpp | 0 .../include/unitree/robot/client/client.hpp | 0 .../unitree/robot/client/client_base.hpp | 0 .../unitree/robot/client/client_stub.hpp | 0 .../unitree/robot/client/lease_client.hpp | 0 .../unitree/robot/future/request_future.hpp | 0 .../obstacles_avoid/obstacles_avoid_api.hpp | 0 .../obstacles_avoid_client.hpp | 0 .../unitree/robot/go2/public/jsonize_type.hpp | 0 .../robot/go2/robot_state/robot_state_api.hpp | 0 .../go2/robot_state/robot_state_client.hpp | 0 .../go2/robot_state/robot_state_error.hpp | 0 .../unitree/robot/go2/sport/sport_api.hpp | 0 .../unitree/robot/go2/sport/sport_client.hpp | 0 .../unitree/robot/go2/sport/sport_error.hpp | 0 .../unitree/robot/go2/utrack/utrack_api.hpp | 0 .../robot/go2/utrack/utrack_client.hpp | 0 .../unitree/robot/go2/video/video_api.hpp | 0 .../unitree/robot/go2/video/video_client.hpp | 0 .../unitree/robot/go2/video/video_error.hpp | 0 .../include/unitree/robot/go2/vui/vui_api.hpp | 0 .../unitree/robot/go2/vui/vui_client.hpp | 0 .../unitree/robot/go2/vui/vui_error.hpp | 0 .../unitree/robot/internal/internal.hpp | 0 .../unitree/robot/internal/internal_api.hpp | 0 .../unitree/robot/internal/internal_error.hpp | 0 .../internal_idl_decl/RequestHeader_.hpp | 0 .../internal_idl_decl/RequestIdentity_.hpp | 0 .../internal_idl_decl/RequestLease_.hpp | 0 .../internal_idl_decl/RequestPolicy_.hpp | 0 .../internal/internal_idl_decl/Request_.hpp | 0 .../internal_idl_decl/ResponseHeader_.hpp | 0 .../internal_idl_decl/ResponseStatus_.hpp | 0 .../internal/internal_idl_decl/Response_.hpp | 0 .../internal/internal_request_response.hpp | 0 .../unitree/robot/serialize/serialize.hpp | 0 .../unitree/robot/server/lease_server.hpp | 0 .../include/unitree/robot/server/server.hpp | 0 .../unitree/robot/server/server_base.hpp | 0 .../unitree/robot/server/server_stub.hpp | 0 .../include/utils/dds_publisher.hpp | 0 .../include/utils/dds_subscriber.hpp | 0 {cpp_bridge => deploy/dds_bridge}/install.sh | 0 .../dds_bridge}/lib/aarch64/libunitree_sdk2.a | Bin .../dds_bridge}/lib/x86_64/libunitree_sdk2.a | Bin .../dds_bridge}/src/high_level/follow_sin.cpp | 0 .../src/high_level/sportmode_test.cpp | 0 .../dds_bridge}/src/lowlevel/bridge.cpp | 0 .../dds_bridge}/src/simple_test.cpp | 0 .../thirdparty/include/dds/config.h | 0 .../dds_bridge}/thirdparty/include/dds/dds.h | 0 .../include/dds/ddsc/dds_basic_types.h | 0 .../include/dds/ddsc/dds_data_allocator.h | 0 .../include/dds/ddsc/dds_internal_api.h | 0 .../include/dds/ddsc/dds_loan_api.h | 0 .../thirdparty/include/dds/ddsc/dds_opcodes.h | 0 .../include/dds/ddsc/dds_public_alloc.h | 0 .../include/dds/ddsc/dds_public_error.h | 0 .../include/dds/ddsc/dds_public_impl.h | 0 .../include/dds/ddsc/dds_public_listener.h | 0 .../include/dds/ddsc/dds_public_qos.h | 0 .../include/dds/ddsc/dds_public_qosdefs.h | 0 .../include/dds/ddsc/dds_public_status.h | 0 .../thirdparty/include/dds/ddsc/dds_rhc.h | 0 .../include/dds/ddsc/dds_statistics.h | 0 .../include/dds/ddsi/ddsi_acknack.h | 0 .../include/dds/ddsi/ddsi_builtin_topic_if.h | 0 .../include/dds/ddsi/ddsi_cdrstream.h | 0 .../include/dds/ddsi/ddsi_cfgelems.h | 0 .../include/dds/ddsi/ddsi_cfgunits.h | 0 .../thirdparty/include/dds/ddsi/ddsi_config.h | 0 .../include/dds/ddsi/ddsi_config_impl.h | 0 .../include/dds/ddsi/ddsi_deadline.h | 0 .../include/dds/ddsi/ddsi_deliver_locally.h | 0 .../include/dds/ddsi/ddsi_domaingv.h | 0 .../include/dds/ddsi/ddsi_endpoint.h | 0 .../thirdparty/include/dds/ddsi/ddsi_entity.h | 0 .../include/dds/ddsi/ddsi_entity_index.h | 0 .../include/dds/ddsi/ddsi_entity_match.h | 0 .../thirdparty/include/dds/ddsi/ddsi_guid.h | 0 .../include/dds/ddsi/ddsi_handshake.h | 0 .../thirdparty/include/dds/ddsi/ddsi_iid.h | 0 .../thirdparty/include/dds/ddsi/ddsi_ipaddr.h | 0 .../include/dds/ddsi/ddsi_keyhash.h | 0 .../include/dds/ddsi/ddsi_lifespan.h | 0 .../include/dds/ddsi/ddsi_list_genptr.h | 0 .../include/dds/ddsi/ddsi_list_tmpl.h | 0 .../include/dds/ddsi/ddsi_locator.h | 0 .../include/dds/ddsi/ddsi_mcgroup.h | 0 .../thirdparty/include/dds/ddsi/ddsi_ownip.h | 0 .../include/dds/ddsi/ddsi_participant.h | 0 .../thirdparty/include/dds/ddsi/ddsi_plist.h | 0 .../include/dds/ddsi/ddsi_plist_generic.h | 0 .../thirdparty/include/dds/ddsi/ddsi_pmd.h | 0 .../include/dds/ddsi/ddsi_portmapping.h | 0 .../include/dds/ddsi/ddsi_proxy_endpoint.h | 0 .../include/dds/ddsi/ddsi_proxy_participant.h | 0 .../thirdparty/include/dds/ddsi/ddsi_raweth.h | 0 .../thirdparty/include/dds/ddsi/ddsi_rhc.h | 0 .../include/dds/ddsi/ddsi_security_exchange.h | 0 .../include/dds/ddsi/ddsi_security_msg.h | 0 .../include/dds/ddsi/ddsi_security_omg.h | 0 .../include/dds/ddsi/ddsi_security_util.h | 0 .../include/dds/ddsi/ddsi_serdata.h | 0 .../include/dds/ddsi/ddsi_serdata_default.h | 0 .../include/dds/ddsi/ddsi_serdata_plist.h | 0 .../include/dds/ddsi/ddsi_serdata_pserop.h | 0 .../include/dds/ddsi/ddsi_sertopic.h | 0 .../include/dds/ddsi/ddsi_sertype.h | 0 .../include/dds/ddsi/ddsi_shm_transport.h | 0 .../thirdparty/include/dds/ddsi/ddsi_ssl.h | 0 .../include/dds/ddsi/ddsi_statistics.h | 0 .../thirdparty/include/dds/ddsi/ddsi_tcp.h | 0 .../include/dds/ddsi/ddsi_threadmon.h | 0 .../thirdparty/include/dds/ddsi/ddsi_time.h | 0 .../thirdparty/include/dds/ddsi/ddsi_tkmap.h | 0 .../thirdparty/include/dds/ddsi/ddsi_topic.h | 0 .../thirdparty/include/dds/ddsi/ddsi_tran.h | 0 .../include/dds/ddsi/ddsi_typebuilder.h | 0 .../include/dds/ddsi/ddsi_typelib.h | 0 .../include/dds/ddsi/ddsi_typelookup.h | 0 .../include/dds/ddsi/ddsi_typewrap.h | 0 .../thirdparty/include/dds/ddsi/ddsi_udp.h | 0 .../thirdparty/include/dds/ddsi/ddsi_vendor.h | 0 .../thirdparty/include/dds/ddsi/ddsi_vnet.h | 0 .../include/dds/ddsi/ddsi_wraddrset.h | 0 .../thirdparty/include/dds/ddsi/ddsi_xqos.h | 0 .../include/dds/ddsi/ddsi_xt_impl.h | 0 .../include/dds/ddsi/ddsi_xt_typeinfo.h | 0 .../include/dds/ddsi/ddsi_xt_typeinfo.idl | 0 .../include/dds/ddsi/ddsi_xt_typelookup.h | 0 .../include/dds/ddsi/ddsi_xt_typelookup.idl | 0 .../include/dds/ddsi/ddsi_xt_typemap.h | 0 .../include/dds/ddsi/ddsi_xt_typemap.idl | 0 .../thirdparty/include/dds/ddsi/q_addrset.h | 0 .../thirdparty/include/dds/ddsi/q_bitset.h | 0 .../thirdparty/include/dds/ddsi/q_bswap.h | 0 .../include/dds/ddsi/q_ddsi_discovery.h | 0 .../thirdparty/include/dds/ddsi/q_debmon.h | 0 .../include/dds/ddsi/q_feature_check.h | 0 .../thirdparty/include/dds/ddsi/q_freelist.h | 0 .../thirdparty/include/dds/ddsi/q_gc.h | 0 .../thirdparty/include/dds/ddsi/q_hbcontrol.h | 0 .../thirdparty/include/dds/ddsi/q_init.h | 0 .../include/dds/ddsi/q_inverse_uint32_set.h | 0 .../thirdparty/include/dds/ddsi/q_lat_estim.h | 0 .../thirdparty/include/dds/ddsi/q_lease.h | 0 .../thirdparty/include/dds/ddsi/q_log.h | 0 .../thirdparty/include/dds/ddsi/q_misc.h | 0 .../thirdparty/include/dds/ddsi/q_pcap.h | 0 .../thirdparty/include/dds/ddsi/q_protocol.h | 0 .../thirdparty/include/dds/ddsi/q_qosmatch.h | 0 .../thirdparty/include/dds/ddsi/q_radmin.h | 0 .../thirdparty/include/dds/ddsi/q_receive.h | 0 .../thirdparty/include/dds/ddsi/q_rtps.h | 0 .../include/dds/ddsi/q_sockwaitset.h | 0 .../thirdparty/include/dds/ddsi/q_thread.h | 0 .../thirdparty/include/dds/ddsi/q_transmit.h | 0 .../thirdparty/include/dds/ddsi/q_unused.h | 0 .../thirdparty/include/dds/ddsi/q_whc.h | 0 .../thirdparty/include/dds/ddsi/q_xevent.h | 0 .../thirdparty/include/dds/ddsi/q_xmsg.h | 0 .../thirdparty/include/dds/ddsi/sysdeps.h | 0 .../thirdparty/include/dds/ddsrt/align.h | 0 .../thirdparty/include/dds/ddsrt/arch.h | 0 .../thirdparty/include/dds/ddsrt/atomics.h | 0 .../include/dds/ddsrt/atomics/arm.h | 0 .../include/dds/ddsrt/atomics/gcc.h | 0 .../include/dds/ddsrt/atomics/msvc.h | 0 .../include/dds/ddsrt/atomics/sun.h | 0 .../thirdparty/include/dds/ddsrt/attributes.h | 0 .../thirdparty/include/dds/ddsrt/avl.h | 0 .../thirdparty/include/dds/ddsrt/bswap.h | 0 .../thirdparty/include/dds/ddsrt/cdtors.h | 0 .../thirdparty/include/dds/ddsrt/circlist.h | 0 .../thirdparty/include/dds/ddsrt/countargs.h | 0 .../thirdparty/include/dds/ddsrt/dynlib.h | 0 .../thirdparty/include/dds/ddsrt/endian.h | 0 .../thirdparty/include/dds/ddsrt/environ.h | 0 .../include/dds/ddsrt/expand_vars.h | 0 .../thirdparty/include/dds/ddsrt/fibheap.h | 0 .../thirdparty/include/dds/ddsrt/filesystem.h | 0 .../include/dds/ddsrt/filesystem/posix.h | 0 .../include/dds/ddsrt/filesystem/windows.h | 0 .../thirdparty/include/dds/ddsrt/heap.h | 0 .../thirdparty/include/dds/ddsrt/hopscotch.h | 0 .../thirdparty/include/dds/ddsrt/ifaddrs.h | 0 .../thirdparty/include/dds/ddsrt/io.h | 0 .../thirdparty/include/dds/ddsrt/iovec.h | 0 .../thirdparty/include/dds/ddsrt/log.h | 0 .../thirdparty/include/dds/ddsrt/md5.h | 0 .../thirdparty/include/dds/ddsrt/mh3.h | 0 .../thirdparty/include/dds/ddsrt/misc.h | 0 .../thirdparty/include/dds/ddsrt/netstat.h | 0 .../thirdparty/include/dds/ddsrt/process.h | 0 .../thirdparty/include/dds/ddsrt/random.h | 0 .../thirdparty/include/dds/ddsrt/retcode.h | 0 .../thirdparty/include/dds/ddsrt/rusage.h | 0 .../thirdparty/include/dds/ddsrt/sched.h | 0 .../thirdparty/include/dds/ddsrt/sockets.h | 0 .../include/dds/ddsrt/sockets/posix.h | 0 .../include/dds/ddsrt/sockets/windows.h | 0 .../include/dds/ddsrt/static_assert.h | 0 .../thirdparty/include/dds/ddsrt/string.h | 0 .../thirdparty/include/dds/ddsrt/strtod.h | 0 .../thirdparty/include/dds/ddsrt/strtol.h | 0 .../thirdparty/include/dds/ddsrt/sync.h | 0 .../include/dds/ddsrt/sync/freertos.h | 0 .../thirdparty/include/dds/ddsrt/sync/posix.h | 0 .../include/dds/ddsrt/sync/windows.h | 0 .../thirdparty/include/dds/ddsrt/threads.h | 0 .../include/dds/ddsrt/threads/freertos.h | 0 .../include/dds/ddsrt/threads/posix.h | 0 .../include/dds/ddsrt/threads/windows.h | 0 .../thirdparty/include/dds/ddsrt/time.h | 0 .../include/dds/ddsrt/time/freertos.h | 0 .../thirdparty/include/dds/ddsrt/types.h | 0 .../include/dds/ddsrt/types/posix.h | 0 .../include/dds/ddsrt/types/vxworks.h | 0 .../include/dds/ddsrt/types/windows.h | 0 .../thirdparty/include/dds/ddsrt/xmlparser.h | 0 .../thirdparty/include/dds/export.h | 0 .../thirdparty/include/dds/features.h | 0 .../thirdparty/include/dds/version.h | 0 .../dds_bridge}/thirdparty/include/ddsc/dds.h | 0 .../thirdparty/include/ddscxx/dds/LICENSE | 0 .../ddscxx/dds/core/BuiltinTopicTypes.hpp | 0 .../include/ddscxx/dds/core/Duration.hpp | 0 .../include/ddscxx/dds/core/Entity.hpp | 0 .../include/ddscxx/dds/core/Exception.hpp | 0 .../include/ddscxx/dds/core/External.hpp | 0 .../ddscxx/dds/core/InstanceHandle.hpp | 0 .../ddscxx/dds/core/LengthUnlimited.hpp | 0 .../include/ddscxx/dds/core/Optional.hpp | 0 .../include/ddscxx/dds/core/QosProvider.hpp | 0 .../include/ddscxx/dds/core/Reference.hpp | 0 .../ddscxx/dds/core/SafeEnumeration.hpp | 0 .../ddscxx/dds/core/TBuiltinTopicTypes.hpp | 0 .../include/ddscxx/dds/core/TEntity.hpp | 0 .../include/ddscxx/dds/core/TEntityQos.hpp | 0 .../ddscxx/dds/core/TInstanceHandle.hpp | 0 .../include/ddscxx/dds/core/TQosProvider.hpp | 0 .../include/ddscxx/dds/core/Time.hpp | 0 .../include/ddscxx/dds/core/Value.hpp | 0 .../include/ddscxx/dds/core/WeakReference.hpp | 0 .../include/ddscxx/dds/core/array.hpp | 0 .../ddscxx/dds/core/cond/Condition.hpp | 0 .../ddscxx/dds/core/cond/GuardCondition.hpp | 0 .../ddscxx/dds/core/cond/StatusCondition.hpp | 0 .../ddscxx/dds/core/cond/TCondition.hpp | 0 .../ddscxx/dds/core/cond/TGuardCondition.hpp | 0 .../ddscxx/dds/core/cond/TStatusCondition.hpp | 0 .../include/ddscxx/dds/core/cond/TWaitSet.hpp | 0 .../include/ddscxx/dds/core/cond/WaitSet.hpp | 0 .../ddscxx/dds/core/cond/detail/Condition.hpp | 0 .../dds/core/cond/detail/GuardCondition.hpp | 0 .../dds/core/cond/detail/StatusCondition.hpp | 0 .../dds/core/cond/detail/TConditionImpl.hpp | 0 .../core/cond/detail/TGuardConditionImpl.hpp | 0 .../core/cond/detail/TStatusConditionImpl.hpp | 0 .../dds/core/cond/detail/TWaitSetImpl.hpp | 0 .../ddscxx/dds/core/cond/detail/WaitSet.hpp | 0 .../include/ddscxx/dds/core/conformance.hpp | 0 .../include/ddscxx/dds/core/ddscore.hpp | 0 .../dds/core/detail/BuiltinTopicTypes.hpp | 0 .../include/ddscxx/dds/core/detail/Entity.hpp | 0 .../ddscxx/dds/core/detail/InstanceHandle.hpp | 0 .../ddscxx/dds/core/detail/QosProvider.hpp | 0 .../ddscxx/dds/core/detail/ReferenceImpl.hpp | 0 .../ddscxx/dds/core/detail/TEntityImpl.hpp | 0 .../ddscxx/dds/core/detail/TEntityQosImpl.hpp | 0 .../dds/core/detail/TInstanceHandleImpl.hpp | 0 .../dds/core/detail/TQosProviderImpl.hpp | 0 .../include/ddscxx/dds/core/detail/Value.hpp | 0 .../dds/core/detail/WeakReferenceImpl.hpp | 0 .../include/ddscxx/dds/core/detail/array.hpp | 0 .../ddscxx/dds/core/detail/conformance.hpp | 0 .../ddscxx/dds/core/detail/ddscore.hpp | 0 .../include/ddscxx/dds/core/detail/export.hpp | 0 .../ddscxx/dds/core/detail/inttypes.hpp | 0 .../include/ddscxx/dds/core/detail/macros.hpp | 0 .../ddscxx/dds/core/detail/module_docs.hpp | 0 .../ddscxx/dds/core/detail/old_win_stdint.h | 0 .../ddscxx/dds/core/detail/ref_traits.hpp | 0 .../include/ddscxx/dds/core/macros.hpp | 0 .../ddscxx/dds/core/policy/CorePolicy.hpp | 0 .../ddscxx/dds/core/policy/PolicyKind.hpp | 0 .../ddscxx/dds/core/policy/QosPolicyCount.hpp | 0 .../ddscxx/dds/core/policy/TCorePolicy.hpp | 0 .../dds/core/policy/TQosPolicyCount.hpp | 0 .../dds/core/policy/detail/CorePolicy.hpp | 0 .../dds/core/policy/detail/QosPolicyCount.hpp | 0 .../core/policy/detail/TCorePolicyImpl.hpp | 0 .../policy/detail/TQosPolicyCountImpl.hpp | 0 .../include/ddscxx/dds/core/ref_traits.hpp | 0 .../include/ddscxx/dds/core/refmacros.hpp | 0 .../include/ddscxx/dds/core/status/State.hpp | 0 .../include/ddscxx/dds/core/status/Status.hpp | 0 .../ddscxx/dds/core/status/TStatus.hpp | 0 .../ddscxx/dds/core/status/detail/Status.hpp | 0 .../dds/core/status/detail/TStatusImpl.hpp | 0 .../include/ddscxx/dds/core/types.hpp | 0 .../ddscxx/dds/core/xtypes/Annotations.hpp | 0 .../dds/core/xtypes/CollectionTypes.hpp | 0 .../ddscxx/dds/core/xtypes/DynamicData.hpp | 0 .../ddscxx/dds/core/xtypes/DynamicType.hpp | 0 .../ddscxx/dds/core/xtypes/MemberType.hpp | 0 .../ddscxx/dds/core/xtypes/PrimitiveTypes.hpp | 0 .../ddscxx/dds/core/xtypes/StructType.hpp | 0 .../ddscxx/dds/core/xtypes/TAnnotation.hpp | 0 .../dds/core/xtypes/TCollectionTypes.hpp | 0 .../ddscxx/dds/core/xtypes/TDynamicData.hpp | 0 .../ddscxx/dds/core/xtypes/TDynamicType.hpp | 0 .../ddscxx/dds/core/xtypes/TMemberType.hpp | 0 .../ddscxx/dds/core/xtypes/TStructType.hpp | 0 .../ddscxx/dds/core/xtypes/TTypeProvider.hpp | 0 .../ddscxx/dds/core/xtypes/TypeKind.hpp | 0 .../ddscxx/dds/core/xtypes/TypeProvider.hpp | 0 .../ddscxx/dds/core/xtypes/UnionCase.hpp | 0 .../ddscxx/dds/core/xtypes/UnionType.hpp | 0 .../dds/core/xtypes/detail/Annotation.hpp | 0 .../core/xtypes/detail/CollectionTypes.hpp | 0 .../dds/core/xtypes/detail/DynamicData.hpp | 0 .../dds/core/xtypes/detail/DynamicType.hpp | 0 .../dds/core/xtypes/detail/MemberType.hpp | 0 .../dds/core/xtypes/detail/PrimitiveTypes.hpp | 0 .../dds/core/xtypes/detail/StructType.hpp | 0 .../dds/core/xtypes/detail/TypeProvider.hpp | 0 .../dds/core/xtypes/detail/UnionCase.hpp | 0 .../dds/core/xtypes/detail/UnionType.hpp | 0 .../thirdparty/include/ddscxx/dds/dds.hpp | 0 .../ddscxx/dds/domain/DomainParticipant.hpp | 0 .../dds/domain/DomainParticipantListener.hpp | 0 .../ddscxx/dds/domain/TDomainParticipant.hpp | 0 .../include/ddscxx/dds/domain/ddsdomain.hpp | 0 .../dds/domain/detail/DomainParticipant.hpp | 0 .../domain/detail/TDomainParticipantImpl.hpp | 0 .../ddscxx/dds/domain/detail/ddsdomain.hpp | 0 .../include/ddscxx/dds/domain/discovery.hpp | 0 .../include/ddscxx/dds/domain/find.hpp | 0 .../dds/domain/qos/DomainParticipantQos.hpp | 0 .../qos/detail/DomainParticipantQos.hpp | 0 .../include/ddscxx/dds/features.hpp | 0 .../include/ddscxx/dds/pub/AnyDataWriter.hpp | 0 .../ddscxx/dds/pub/AnyDataWriterListener.hpp | 0 .../include/ddscxx/dds/pub/CoherentSet.hpp | 0 .../include/ddscxx/dds/pub/DataWriter.hpp | 0 .../ddscxx/dds/pub/DataWriterListener.hpp | 0 .../include/ddscxx/dds/pub/Publisher.hpp | 0 .../ddscxx/dds/pub/PublisherListener.hpp | 0 .../ddscxx/dds/pub/SuspendedPublication.hpp | 0 .../include/ddscxx/dds/pub/TAnyDataWriter.hpp | 0 .../include/ddscxx/dds/pub/TCoherentSet.hpp | 0 .../include/ddscxx/dds/pub/TPublisher.hpp | 0 .../ddscxx/dds/pub/TSuspendedPublication.hpp | 0 .../include/ddscxx/dds/pub/ddspub.hpp | 0 .../ddscxx/dds/pub/detail/AnyDataWriter.hpp | 0 .../ddscxx/dds/pub/detail/CoherentSet.hpp | 0 .../ddscxx/dds/pub/detail/DataWriter.hpp | 0 .../ddscxx/dds/pub/detail/DataWriterImpl.hpp | 0 .../ddscxx/dds/pub/detail/Publisher.hpp | 0 .../dds/pub/detail/SuspendedPublication.hpp | 0 .../dds/pub/detail/TAnyDataWriterImpl.hpp | 0 .../dds/pub/detail/TCoherentSetImpl.hpp | 0 .../ddscxx/dds/pub/detail/TPublisherImpl.hpp | 0 .../pub/detail/TSuspendedPublicationImpl.hpp | 0 .../include/ddscxx/dds/pub/detail/ddspub.hpp | 0 .../ddscxx/dds/pub/detail/discovery.hpp | 0 .../include/ddscxx/dds/pub/detail/find.hpp | 0 .../include/ddscxx/dds/pub/discovery.hpp | 0 .../include/ddscxx/dds/pub/find.hpp | 0 .../ddscxx/dds/pub/qos/DataWriterQos.hpp | 0 .../ddscxx/dds/pub/qos/PublisherQos.hpp | 0 .../dds/pub/qos/detail/DataWriterQos.hpp | 0 .../dds/pub/qos/detail/PublisherQos.hpp | 0 .../include/ddscxx/dds/sub/AnyDataReader.hpp | 0 .../ddscxx/dds/sub/AnyDataReaderListener.hpp | 0 .../include/ddscxx/dds/sub/CoherentAccess.hpp | 0 .../include/ddscxx/dds/sub/DataReader.hpp | 0 .../ddscxx/dds/sub/DataReaderListener.hpp | 0 .../ddscxx/dds/sub/GenerationCount.hpp | 0 .../include/ddscxx/dds/sub/LoanedSamples.hpp | 0 .../include/ddscxx/dds/sub/Query.hpp | 0 .../include/ddscxx/dds/sub/Rank.hpp | 0 .../include/ddscxx/dds/sub/Sample.hpp | 0 .../include/ddscxx/dds/sub/SampleInfo.hpp | 0 .../include/ddscxx/dds/sub/SampleRef.hpp | 0 .../include/ddscxx/dds/sub/SharedSamples.hpp | 0 .../include/ddscxx/dds/sub/Subscriber.hpp | 0 .../ddscxx/dds/sub/SubscriberListener.hpp | 0 .../include/ddscxx/dds/sub/TAnyDataReader.hpp | 0 .../ddscxx/dds/sub/TCoherentAccess.hpp | 0 .../include/ddscxx/dds/sub/TDataReader.hpp | 0 .../ddscxx/dds/sub/TGenerationCount.hpp | 0 .../include/ddscxx/dds/sub/TQuery.hpp | 0 .../include/ddscxx/dds/sub/TRank.hpp | 0 .../include/ddscxx/dds/sub/TSample.hpp | 0 .../include/ddscxx/dds/sub/TSampleInfo.hpp | 0 .../include/ddscxx/dds/sub/TSampleRef.hpp | 0 .../include/ddscxx/dds/sub/TSubscriber.hpp | 0 .../ddscxx/dds/sub/cond/QueryCondition.hpp | 0 .../ddscxx/dds/sub/cond/ReadCondition.hpp | 0 .../ddscxx/dds/sub/cond/TQueryCondition.hpp | 0 .../ddscxx/dds/sub/cond/TReadCondition.hpp | 0 .../dds/sub/cond/detail/QueryCondition.hpp | 0 .../dds/sub/cond/detail/ReadCondition.hpp | 0 .../sub/cond/detail/TQueryConditionImpl.hpp | 0 .../sub/cond/detail/TReadConditionImpl.hpp | 0 .../include/ddscxx/dds/sub/ddssub.hpp | 0 .../ddscxx/dds/sub/detail/AnyDataReader.hpp | 0 .../ddscxx/dds/sub/detail/CoherentAccess.hpp | 0 .../ddscxx/dds/sub/detail/DataReader.hpp | 0 .../ddscxx/dds/sub/detail/GenerationCount.hpp | 0 .../ddscxx/dds/sub/detail/LoanedSamples.hpp | 0 .../dds/sub/detail/LoanedSamplesImpl.hpp | 0 .../ddscxx/dds/sub/detail/Manipulators.hpp | 0 .../include/ddscxx/dds/sub/detail/Query.hpp | 0 .../include/ddscxx/dds/sub/detail/Rank.hpp | 0 .../include/ddscxx/dds/sub/detail/Sample.hpp | 0 .../ddscxx/dds/sub/detail/SampleInfo.hpp | 0 .../ddscxx/dds/sub/detail/SampleRef.hpp | 0 .../ddscxx/dds/sub/detail/SamplesHolder.hpp | 0 .../ddscxx/dds/sub/detail/SharedSamples.hpp | 0 .../dds/sub/detail/SharedSamplesImpl.hpp | 0 .../ddscxx/dds/sub/detail/Subscriber.hpp | 0 .../dds/sub/detail/TAnyDataReaderImpl.hpp | 0 .../dds/sub/detail/TCoherentAccessImpl.hpp | 0 .../ddscxx/dds/sub/detail/TDataReaderImpl.hpp | 0 .../dds/sub/detail/TGenerationCountImpl.hpp | 0 .../ddscxx/dds/sub/detail/TQueryImpl.hpp | 0 .../ddscxx/dds/sub/detail/TRankImpl.hpp | 0 .../ddscxx/dds/sub/detail/TSampleImpl.hpp | 0 .../ddscxx/dds/sub/detail/TSampleInfoImpl.hpp | 0 .../ddscxx/dds/sub/detail/TSampleRefImpl.hpp | 0 .../ddscxx/dds/sub/detail/TSubscriberImpl.hpp | 0 .../include/ddscxx/dds/sub/detail/ddssub.hpp | 0 .../ddscxx/dds/sub/detail/discovery.hpp | 0 .../include/ddscxx/dds/sub/detail/find.hpp | 0 .../include/ddscxx/dds/sub/discovery.hpp | 0 .../include/ddscxx/dds/sub/find.hpp | 0 .../ddscxx/dds/sub/qos/DataReaderQos.hpp | 0 .../ddscxx/dds/sub/qos/SubscriberQos.hpp | 0 .../dds/sub/qos/detail/DataReaderQos.hpp | 0 .../dds/sub/qos/detail/SubscriberQos.hpp | 0 .../ddscxx/dds/sub/status/DataState.hpp | 0 .../dds/sub/status/detail/DataStateImpl.hpp | 0 .../include/ddscxx/dds/topic/AnyTopic.hpp | 0 .../ddscxx/dds/topic/AnyTopicListener.hpp | 0 .../include/ddscxx/dds/topic/BuiltinTopic.hpp | 0 .../ddscxx/dds/topic/BuiltinTopicKey.hpp | 0 .../ddscxx/dds/topic/ContentFilteredTopic.hpp | 0 .../include/ddscxx/dds/topic/Filter.hpp | 0 .../include/ddscxx/dds/topic/MultiTopic.hpp | 0 .../include/ddscxx/dds/topic/TAnyTopic.hpp | 0 .../ddscxx/dds/topic/TBuiltinTopic.hpp | 0 .../ddscxx/dds/topic/TBuiltinTopicKey.hpp | 0 .../dds/topic/TContentFilteredTopic.hpp | 0 .../include/ddscxx/dds/topic/TFilter.hpp | 0 .../include/ddscxx/dds/topic/TMultiTopic.hpp | 0 .../include/ddscxx/dds/topic/TTopic.hpp | 0 .../ddscxx/dds/topic/TTopicDescription.hpp | 0 .../include/ddscxx/dds/topic/Topic.hpp | 0 .../ddscxx/dds/topic/TopicDescription.hpp | 0 .../ddscxx/dds/topic/TopicInstance.hpp | 0 .../ddscxx/dds/topic/TopicListener.hpp | 0 .../include/ddscxx/dds/topic/TopicTraits.hpp | 0 .../include/ddscxx/dds/topic/ddstopic.hpp | 0 .../ddscxx/dds/topic/detail/AnyTopic.hpp | 0 .../ddscxx/dds/topic/detail/BuiltinTopic.hpp | 0 .../dds/topic/detail/BuiltinTopicKey.hpp | 0 .../dds/topic/detail/ContentFilteredTopic.hpp | 0 .../ddscxx/dds/topic/detail/Filter.hpp | 0 .../ddscxx/dds/topic/detail/MultiTopic.hpp | 0 .../ddscxx/dds/topic/detail/TAnyTopicImpl.hpp | 0 .../dds/topic/detail/TBuiltinTopicImpl.hpp | 0 .../dds/topic/detail/TBuiltinTopicKeyImpl.hpp | 0 .../detail/TContentFilteredTopicImpl.hpp | 0 .../ddscxx/dds/topic/detail/TFilterImpl.hpp | 0 .../topic/detail/TTopicDescriptionImpl.hpp | 0 .../ddscxx/dds/topic/detail/TTopicImpl.hpp | 0 .../include/ddscxx/dds/topic/detail/Topic.hpp | 0 .../dds/topic/detail/TopicDescription.hpp | 0 .../dds/topic/detail/TopicInstanceImpl.hpp | 0 .../ddscxx/dds/topic/detail/ddstopic.hpp | 0 .../ddscxx/dds/topic/detail/discovery.hpp | 0 .../include/ddscxx/dds/topic/detail/find.hpp | 0 .../include/ddscxx/dds/topic/discovery.hpp | 0 .../include/ddscxx/dds/topic/find.hpp | 0 .../include/ddscxx/dds/topic/qos/TopicQos.hpp | 0 .../ddscxx/dds/topic/qos/detail/TopicQos.hpp | 0 .../cyclonedds/ForwardDeclarations.hpp | 0 .../cyclonedds/core/DDScObjectDelegate.hpp | 0 .../cyclonedds/core/EntityDelegate.hpp | 0 .../cyclonedds/core/EntityRegistry.hpp | 0 .../org/eclipse/cyclonedds/core/EntitySet.hpp | 0 .../core/InstanceHandleDelegate.hpp | 0 .../cyclonedds/core/ListenerDispatcher.hpp | 0 .../org/eclipse/cyclonedds/core/MiscUtils.hpp | 0 .../org/eclipse/cyclonedds/core/Missing.hpp | 0 .../org/eclipse/cyclonedds/core/Mutex.hpp | 0 .../cyclonedds/core/ObjectDelegate.hpp | 0 .../org/eclipse/cyclonedds/core/ObjectSet.hpp | 0 .../cyclonedds/core/QosProviderDelegate.hpp | 0 .../eclipse/cyclonedds/core/ReportUtils.hpp | 0 .../eclipse/cyclonedds/core/ScopedLock.hpp | 0 .../eclipse/cyclonedds/core/TimeHelper.hpp | 0 .../cyclonedds/core/WeakReferenceSet.hpp | 0 .../cyclonedds/core/cdr/basic_cdr_ser.hpp | 0 .../eclipse/cyclonedds/core/cdr/cdr_enums.hpp | 0 .../cyclonedds/core/cdr/cdr_stream.hpp | 0 .../cyclonedds/core/cdr/entity_properties.hpp | 0 .../core/cdr/extended_cdr_v1_ser.hpp | 0 .../core/cdr/extended_cdr_v2_ser.hpp | 0 .../eclipse/cyclonedds/core/cdr/fragchain.hpp | 0 .../core/cond/ConditionDelegate.hpp | 0 .../cyclonedds/core/cond/FunctorHolder.hpp | 0 .../core/cond/GuardConditionDelegate.hpp | 0 .../core/cond/ShadowParticipant.hpp | 0 .../core/cond/StatusConditionDelegate.hpp | 0 .../cyclonedds/core/cond/WaitSetDelegate.hpp | 0 .../org/eclipse/cyclonedds/core/config.hpp | 0 .../eclipse/cyclonedds/core/policy/Policy.hpp | 0 .../cyclonedds/core/policy/PolicyDelegate.hpp | 0 .../core/policy/ProprietaryPolicyKind.hpp | 0 .../core/policy/QosPolicyCountDelegate.hpp | 0 .../cyclonedds/core/policy/TPolicy.hpp | 0 .../cyclonedds/core/status/StatusDelegate.hpp | 0 .../eclipse/cyclonedds/core/type_helpers.hpp | 0 .../org/eclipse/cyclonedds/domain/Domain.hpp | 0 .../domain/DomainParticipantDelegate.hpp | 0 .../domain/DomainParticipantListener.hpp | 0 .../domain/DomainParticipantRegistry.hpp | 0 .../eclipse/cyclonedds/domain/DomainWrap.hpp | 0 .../qos/DomainParticipantQosDelegate.hpp | 0 .../cyclonedds/pub/AnyDataWriterDelegate.hpp | 0 .../cyclonedds/pub/CoherentSetDelegate.hpp | 0 .../cyclonedds/pub/PublisherDelegate.hpp | 0 .../pub/SuspendedPublicationDelegate.hpp | 0 .../pub/qos/DataWriterQosDelegate.hpp | 0 .../pub/qos/PublisherQosDelegate.hpp | 0 .../cyclonedds/sub/AnyDataReaderDelegate.hpp | 0 .../sub/BuiltinSubscriberDelegate.hpp | 0 .../cyclonedds/sub/CoherentAccessDelegate.hpp | 0 .../cyclonedds/sub/GenerationCountImpl.hpp | 0 .../eclipse/cyclonedds/sub/QueryDelegate.hpp | 0 .../org/eclipse/cyclonedds/sub/RankImpl.hpp | 0 .../eclipse/cyclonedds/sub/SampleInfoImpl.hpp | 0 .../cyclonedds/sub/SubscriberDelegate.hpp | 0 .../sub/cond/QueryConditionDelegate.hpp | 0 .../sub/cond/ReadConditionDelegate.hpp | 0 .../sub/qos/DataReaderQosDelegate.hpp | 0 .../sub/qos/SubscriberQosDelegate.hpp | 0 .../cyclonedds/topic/AnyTopicDelegate.hpp | 0 .../cyclonedds/topic/AnyTopicListener.hpp | 0 .../eclipse/cyclonedds/topic/BuiltinTopic.hpp | 0 .../cyclonedds/topic/BuiltinTopicCopy.hpp | 0 .../cyclonedds/topic/BuiltinTopicDelegate.hpp | 0 .../topic/BuiltinTopicKeyDelegate.hpp | 0 .../cyclonedds/topic/BuiltinTopicTraits.hpp | 0 .../org/eclipse/cyclonedds/topic/CDRBlob.hpp | 0 .../cyclonedds/topic/FilterDelegate.hpp | 0 .../cyclonedds/topic/TBuiltinTopic.hpp | 0 .../topic/TopicDescriptionDelegate.hpp | 0 .../cyclonedds/topic/TopicListener.hpp | 0 .../eclipse/cyclonedds/topic/TopicTraits.hpp | 0 .../eclipse/cyclonedds/topic/datatopic.hpp | 0 .../eclipse/cyclonedds/topic/discovery.hpp | 0 .../org/eclipse/cyclonedds/topic/find.hpp | 0 .../org/eclipse/cyclonedds/topic/hash.hpp | 0 .../cyclonedds/topic/qos/TopicQosDelegate.hpp | 0 .../src/lidar_node/CMakeLists.txt | 0 .../src/lidar_node/README.md | 0 .../src/lidar_node/Version.h.in | 0 .../src/lidar_node/config/config.yaml | 0 .../src/lidar_node/launch/dashing_start.py | 0 .../src/lidar_node/launch/start.launch | 0 .../src/lidar_node/launch/start.py | 0 .../src/lidar_node/msg/UdpFrame.msg | 0 .../src/lidar_node/msg/UdpPacket.msg | 0 .../src/lidar_node/msg/msg_ros2/UdpFrame.msg | 0 .../src/lidar_node/msg/msg_ros2/UdpPacket.msg | 0 .../lidar_node/node/hesai_ros_driver_node.cc | 0 .../lidar_node/node/hesai_ros_driver_node.cu | 0 .../src/lidar_node/package.xml | 0 .../src/lidar_node/rviz/rviz.rviz | 0 .../src/lidar_node/rviz/rviz2.rviz | 0 .../driver/HesaiLidar_SDK_2.0/CMakeLists.txt | 0 .../src/driver/HesaiLidar_SDK_2.0/LICENSE | 0 .../src/driver/HesaiLidar_SDK_2.0/README.md | 0 .../driver/HesaiLidar_SDK_2.0/Version.h.in | 0 .../driver/HesaiLidar_SDK_2.0/change notes.md | 0 .../AT128E2X_Angle Correction File.dat | Bin .../FT120C1X_Angle Correction File.dat | Bin .../OT128_Angle Correction File.csv | 0 .../Pandar128E3X_Angle Correction File.csv | 0 .../Pandar40M_Angle Correction File.csv | 0 .../Pandar40P_Angle Correction File.csv | 0 .../Pandar64_Angle Correction File.csv | 0 .../Pandar90E3X_Angle Correction File.csv | 0 .../PandarQT_Angle Correction File.csv | 0 .../PandarXT-16_Angle Correction File.csv | 0 .../PandarXT_Angle Correction File.csv | 0 .../QT128C2X_Angle Correction File.csv | 0 .../QT128C2X_Channel_Cofig.csv | 0 .../XT32M2X_Angle Correction File.csv | 0 .../AT128E2X_Firetime Correction File.csv | 0 .../Pandar128E3X_Firetime Correction File.csv | 0 .../Pandar40E3X_Firetime Correction File.csv | 0 .../Pandar40P_Firetime Correction File.csv | 0 .../Pandar64E3X_Firetime Correction File.csv | 0 .../Pandar64_Firetime Correction File.csv | 0 .../Pandar90_Firetime Correction File.csv | 0 .../PandarXT-16_Firetime Correction File.csv | 0 .../PandarXT_Firetime Correction File.csv | 0 .../QT128C2X_Firetime Correction File.csv | 0 .../driver/hesai_lidar_sdk.hpp | 0 .../driver/hesai_lidar_sdk_gpu.cuh | 0 .../libhesai/CMakeLists.txt | 0 .../Container/include/blocking_ring.h | 0 .../libhesai/Container/include/ring.h | 0 .../Container/include/ring_2d_shared.h | 0 .../libhesai/Container/include/ring_2dex.h | 0 .../libhesai/Container/src/blocking_ring.cc | 0 .../libhesai/Container/src/ring.cc | 0 .../libhesai/Container/src/ring_2d_shared.cc | 0 .../libhesai/Container/src/ring_2dex.cc | 0 .../libhesai/Lidar/lidar.cc | 0 .../HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.h | 0 .../libhesai/Lidar/lidar_types.h | 0 .../libhesai/Logger/include/logger.h | 0 .../libhesai/Logger/src/logger.cc | 0 .../libhesai/PtcClient/include/client_base.h | 0 .../include/lidar_communication_header.h | 0 .../libhesai/PtcClient/include/ptc_client.h | 0 .../libhesai/PtcClient/include/tcp_client.h | 0 .../PtcClient/include/tcp_ssl_client.h | 0 .../libhesai/PtcClient/src/ptc_client.cc | 0 .../libhesai/PtcClient/src/tcp_client.cc | 0 .../libhesai/PtcClient/src/tcp_ssl_client.cc | 0 .../PtcParser/include/general_ptc_parser.h | 0 .../PtcParser/include/ptc_1_0_parser.h | 0 .../PtcParser/include/ptc_2_0_parser.h | 0 .../libhesai/PtcParser/ptc_parser.cc | 0 .../libhesai/PtcParser/ptc_parser.h | 0 .../PtcParser/src/general_ptc_parser.cc | 0 .../libhesai/PtcParser/src/ptc_1_0_parser.cc | 0 .../libhesai/PtcParser/src/ptc_2_0_parser.cc | 0 .../libhesai/Source/include/pcap_saver.h | 0 .../libhesai/Source/include/pcap_source.h | 0 .../libhesai/Source/include/socket_source.h | 0 .../libhesai/Source/include/source.h | 0 .../libhesai/Source/src/pcap_saver.cc | 0 .../libhesai/Source/src/pcap_source.cc | 0 .../libhesai/Source/src/socket_source.cc | 0 .../libhesai/Source/src/source.cc | 0 .../UdpParser/include/general_parser.h | 0 .../UdpParser/include/udp1_4_parser.h | 0 .../UdpParser/include/udp2_4_parser.h | 0 .../UdpParser/include/udp2_5_parser.h | 0 .../UdpParser/include/udp3_1_parser.h | 0 .../UdpParser/include/udp3_2_parser.h | 0 .../UdpParser/include/udp4_3_parser.h | 0 .../UdpParser/include/udp6_1_parser.h | 0 .../UdpParser/include/udp7_2_parser.h | 0 .../UdpParser/include/udp_p40_parser.h | 0 .../UdpParser/include/udp_p64_parser.h | 0 .../libhesai/UdpParser/src/general_parser.cc | 0 .../libhesai/UdpParser/src/udp1_4_parser.cc | 0 .../libhesai/UdpParser/src/udp2_4_parser.cc | 0 .../libhesai/UdpParser/src/udp2_5_parser.cc | 0 .../libhesai/UdpParser/src/udp3_1_parser.cc | 0 .../libhesai/UdpParser/src/udp3_2_parser.cc | 0 .../libhesai/UdpParser/src/udp4_3_parser.cc | 0 .../libhesai/UdpParser/src/udp6_1_parser.cc | 0 .../libhesai/UdpParser/src/udp7_2_parser.cc | 0 .../libhesai/UdpParser/src/udp_p40_parser.cc | 0 .../libhesai/UdpParser/src/udp_p64_parser.cc | 0 .../libhesai/UdpParser/udp_parser.cc | 0 .../libhesai/UdpParser/udp_parser.h | 0 .../UdpParserGpu/include/general_parser_gpu.h | 0 .../libhesai/UdpParserGpu/include/nvbuffer.h | 0 .../UdpParserGpu/include/return_code.h | 0 .../UdpParserGpu/include/safe_call.cuh | 0 .../UdpParserGpu/include/udp1_4_parser_gpu.h | 0 .../UdpParserGpu/include/udp2_5_parser_gpu.h | 0 .../UdpParserGpu/include/udp3_1_parser_gpu.h | 0 .../UdpParserGpu/include/udp3_2_parser_gpu.h | 0 .../UdpParserGpu/include/udp4_3_parser_gpu.h | 0 .../UdpParserGpu/include/udp6_1_parser_gpu.h | 0 .../UdpParserGpu/include/udp7_2_parser_gpu.h | 0 .../UdpParserGpu/include/udp_p40_parser_gpu.h | 0 .../UdpParserGpu/include/udp_p64_parser_gpu.h | 0 .../libhesai/UdpParserGpu/src/buffer.cu | 0 .../UdpParserGpu/src/general_parser_gpu.cu | 0 .../UdpParserGpu/src/udp1_4_parser_gpu.cu | 0 .../UdpParserGpu/src/udp2_5_parser_gpu.cu | 0 .../UdpParserGpu/src/udp3_1_parser_gpu.cu | 0 .../UdpParserGpu/src/udp3_2_parser_gpu.cu | 0 .../UdpParserGpu/src/udp4_3_parser_gpu.cu | 0 .../UdpParserGpu/src/udp6_1_parser_gpu.cu | 0 .../UdpParserGpu/src/udp7_2_parser_gpu.cu | 0 .../UdpParserGpu/src/udp_p40_parser_gpu.cu | 0 .../UdpParserGpu/src/udp_p64_parser_gpu.cu | 0 .../libhesai/UdpParserGpu/udp_parser_gpu.cu | 0 .../libhesai/UdpParserGpu/udp_parser_gpu.h | 0 .../libhesai/UdpProtocol/fault_message.h | 0 .../UdpProtocol/udp_protocol_header.h | 0 .../libhesai/UdpProtocol/udp_protocol_p40.h | 0 .../libhesai/UdpProtocol/udp_protocol_p64.h | 0 .../libhesai/UdpProtocol/udp_protocol_v1_4.h | 0 .../libhesai/UdpProtocol/udp_protocol_v2_4.h | 0 .../libhesai/UdpProtocol/udp_protocol_v2_5.h | 0 .../libhesai/UdpProtocol/udp_protocol_v3_1.h | 0 .../libhesai/UdpProtocol/udp_protocol_v3_2.h | 0 .../libhesai/UdpProtocol/udp_protocol_v4_3.h | 0 .../libhesai/UdpProtocol/udp_protocol_v6_1.h | 0 .../libhesai/UdpProtocol/udp_protocol_v7_2.h | 0 .../libhesai/driver_param.h | 0 .../libhesai/include/auto_tick_count.h | 0 .../libhesai/include/plat_utils.h | 0 .../libhesai/src/auto_tick_count.cc | 0 .../libhesai/src/plat_utils.cc | 0 .../driver/HesaiLidar_SDK_2.0/test/test.cc | 0 .../driver/HesaiLidar_SDK_2.0/test/test.cu | 0 .../HesaiLidar_SDK_2.0/tool/CMakeLists.txt | 0 .../HesaiLidar_SDK_2.0/tool/Version.h.in | 0 .../tool/packet_loss_tool.cc | 0 .../HesaiLidar_SDK_2.0/tool/pcl_tool.cc | 0 .../HesaiLidar_SDK_2.0/tool/pcl_tool.cu | 0 .../lidar_node/src/manager/node_manager.cc | 0 .../lidar_node/src/manager/node_manager.cu | 0 .../src/lidar_node/src/manager/node_manager.h | 0 .../src/manager/source_driver_ros1.hpp | 0 .../src/manager/source_driver_ros2.hpp | 0 .../lidar_node/src/utility/yaml_reader.hpp | 0 .../robot_ws/install/.colcon_install_layout | 1 + deploy/robot_ws/install/COLCON_IGNORE | 0 .../robot_ws/install/_local_setup_util_ps1.py | 407 ++ .../robot_ws/install/_local_setup_util_sh.py | 407 ++ .../install/go2py_node/lib/go2py_node/bridge | Bin 0 -> 4359944 bytes .../package_run_dependencies/go2py_node | 1 + .../resource_index/packages/go2py_node | 0 .../parent_prefix_path/go2py_node | 1 + .../share/colcon-core/packages/go2py_node | 1 + .../cmake/go2py_nodeConfig-version.cmake | 14 + .../go2py_node/cmake/go2py_nodeConfig.cmake | 42 + .../environment/ament_prefix_path.dsv | 1 + .../environment/ament_prefix_path.sh | 4 + .../share/go2py_node/environment/path.dsv | 1 + .../share/go2py_node/environment/path.sh | 5 + .../go2py_node/hook/cmake_prefix_path.dsv | 1 + .../go2py_node/hook/cmake_prefix_path.ps1 | 3 + .../go2py_node/hook/cmake_prefix_path.sh | 3 + .../share/go2py_node/local_setup.bash | 46 + .../share/go2py_node/local_setup.dsv | 2 + .../share/go2py_node/local_setup.sh | 133 + .../share/go2py_node/local_setup.zsh | 59 + .../go2py_node/share/go2py_node/package.bash | 39 + .../go2py_node/share/go2py_node/package.dsv | 8 + .../go2py_node/share/go2py_node/package.ps1 | 116 + .../go2py_node/share/go2py_node/package.sh | 87 + .../go2py_node/share/go2py_node/package.xml | 24 + .../go2py_node/share/go2py_node/package.zsh | 50 + deploy/robot_ws/install/local_setup.bash | 121 + deploy/robot_ws/install/local_setup.ps1 | 55 + deploy/robot_ws/install/local_setup.sh | 137 + deploy/robot_ws/install/local_setup.zsh | 134 + deploy/robot_ws/install/setup.bash | 34 + deploy/robot_ws/install/setup.ps1 | 30 + deploy/robot_ws/install/setup.sh | 49 + deploy/robot_ws/install/setup.zsh | 34 + .../msg/detail/request__builder.hpp | 87 + .../msg/detail/request__functions.c | 288 + .../msg/detail/request__functions.h | 177 + .../request__rosidl_typesupport_fastrtps_c.h | 36 + ...quest__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...uest__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_api/msg/detail/request__struct.h | 50 + .../msg/detail/request__struct.hpp | 160 + .../msg/detail/request__traits.hpp | 46 + .../msg/detail/request__type_support.c | 123 + .../msg/detail/request__type_support.cpp | 164 + .../msg/detail/request__type_support.h | 33 + .../msg/detail/request__type_support.hpp | 31 + .../msg/detail/request_header__builder.hpp | 87 + .../msg/detail/request_header__functions.c | 288 + .../msg/detail/request_header__functions.h | 177 + ...st_header__rosidl_typesupport_fastrtps_c.h | 36 + ...eader__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...ader__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/request_header__struct.h | 50 + .../msg/detail/request_header__struct.hpp | 159 + .../msg/detail/request_header__traits.hpp | 50 + .../msg/detail/request_header__type_support.c | 131 + .../detail/request_header__type_support.cpp | 137 + .../msg/detail/request_header__type_support.h | 33 + .../detail/request_header__type_support.hpp | 31 + .../msg/detail/request_identity__builder.hpp | 71 + .../msg/detail/request_identity__functions.c | 239 + .../msg/detail/request_identity__functions.h | 177 + ..._identity__rosidl_typesupport_fastrtps_c.h | 36 + ...ntity__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tity__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/request_identity__struct.h | 41 + .../msg/detail/request_identity__struct.hpp | 144 + .../msg/detail/request_identity__traits.hpp | 42 + .../detail/request_identity__type_support.c | 96 + .../detail/request_identity__type_support.cpp | 122 + .../detail/request_identity__type_support.h | 33 + .../detail/request_identity__type_support.hpp | 31 + .../msg/detail/request_lease__builder.hpp | 55 + .../msg/detail/request_lease__functions.c | 231 + .../msg/detail/request_lease__functions.h | 177 + ...est_lease__rosidl_typesupport_fastrtps_c.h | 36 + ...lease__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...ease__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/request_lease__struct.h | 40 + .../msg/detail/request_lease__struct.hpp | 130 + .../msg/detail/request_lease__traits.hpp | 42 + .../msg/detail/request_lease__type_support.c | 81 + .../detail/request_lease__type_support.cpp | 107 + .../msg/detail/request_lease__type_support.h | 33 + .../detail/request_lease__type_support.hpp | 31 + .../msg/detail/request_policy__builder.hpp | 71 + .../msg/detail/request_policy__functions.c | 239 + .../msg/detail/request_policy__functions.h | 177 + ...st_policy__rosidl_typesupport_fastrtps_c.h | 36 + ...olicy__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...licy__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/request_policy__struct.h | 41 + .../msg/detail/request_policy__struct.hpp | 144 + .../msg/detail/request_policy__traits.hpp | 42 + .../msg/detail/request_policy__type_support.c | 96 + .../detail/request_policy__type_support.cpp | 122 + .../msg/detail/request_policy__type_support.h | 33 + .../detail/request_policy__type_support.hpp | 31 + .../msg/detail/response__builder.hpp | 87 + .../msg/detail/response__functions.c | 288 + .../msg/detail/response__functions.h | 177 + .../response__rosidl_typesupport_fastrtps_c.h | 36 + ...ponse__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...onse__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_api/msg/detail/response__struct.h | 50 + .../msg/detail/response__struct.hpp | 160 + .../msg/detail/response__traits.hpp | 46 + .../msg/detail/response__type_support.c | 123 + .../msg/detail/response__type_support.cpp | 164 + .../msg/detail/response__type_support.h | 33 + .../msg/detail/response__type_support.hpp | 31 + .../msg/detail/response_header__builder.hpp | 71 + .../msg/detail/response_header__functions.c | 267 + .../msg/detail/response_header__functions.h | 177 + ...se_header__rosidl_typesupport_fastrtps_c.h | 36 + ...eader__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...ader__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/response_header__struct.h | 47 + .../msg/detail/response_header__struct.hpp | 143 + .../msg/detail/response_header__traits.hpp | 48 + .../detail/response_header__type_support.c | 110 + .../detail/response_header__type_support.cpp | 122 + .../detail/response_header__type_support.h | 33 + .../detail/response_header__type_support.hpp | 31 + .../msg/detail/response_status__builder.hpp | 55 + .../msg/detail/response_status__functions.c | 231 + .../msg/detail/response_status__functions.h | 177 + ...se_status__rosidl_typesupport_fastrtps_c.h | 36 + ...tatus__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...atus__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/response_status__struct.h | 40 + .../msg/detail/response_status__struct.hpp | 130 + .../msg/detail/response_status__traits.hpp | 42 + .../detail/response_status__type_support.c | 81 + .../detail/response_status__type_support.cpp | 107 + .../detail/response_status__type_support.h | 33 + .../detail/response_status__type_support.hpp | 31 + .../include/unitree_api/msg/request.h | 12 + .../include/unitree_api/msg/request.hpp | 12 + .../include/unitree_api/msg/request_header.h | 12 + .../unitree_api/msg/request_header.hpp | 12 + .../unitree_api/msg/request_identity.h | 12 + .../unitree_api/msg/request_identity.hpp | 12 + .../include/unitree_api/msg/request_lease.h | 12 + .../include/unitree_api/msg/request_lease.hpp | 12 + .../include/unitree_api/msg/request_policy.h | 12 + .../unitree_api/msg/request_policy.hpp | 12 + .../include/unitree_api/msg/response.h | 12 + .../include/unitree_api/msg/response.hpp | 12 + .../include/unitree_api/msg/response_header.h | 12 + .../unitree_api/msg/response_header.hpp | 12 + .../include/unitree_api/msg/response_status.h | 12 + .../unitree_api/msg/response_status.hpp | 12 + .../rosidl_generator_c__visibility_control.h | 42 + ...sidl_generator_cpp__visibility_control.hpp | 42 + ...pesupport_fastrtps_c__visibility_control.h | 43 + ...support_fastrtps_cpp__visibility_control.h | 43 + ...port_introspection_c__visibility_control.h | 43 + .../site-packages/unitree_api/__init__.py | 0 .../site-packages/unitree_api/msg/__init__.py | 8 + .../site-packages/unitree_api/msg/_request.py | 184 + .../unitree_api/msg/_request_header.py | 178 + .../unitree_api/msg/_request_header_s.c | 159 + .../unitree_api/msg/_request_identity.py | 145 + .../unitree_api/msg/_request_identity_s.c | 118 + .../unitree_api/msg/_request_lease.py | 124 + .../unitree_api/msg/_request_lease_s.c | 98 + .../unitree_api/msg/_request_policy.py | 143 + .../unitree_api/msg/_request_policy_s.c | 118 + .../unitree_api/msg/_request_s.c | 263 + .../unitree_api/msg/_response.py | 184 + .../unitree_api/msg/_response_header.py | 153 + .../unitree_api/msg/_response_header_s.c | 132 + .../unitree_api/msg/_response_s.c | 262 + .../unitree_api/msg/_response_status.py | 124 + .../unitree_api/msg/_response_status_s.c | 98 + .../package_run_dependencies/unitree_api | 1 + .../resource_index/packages/unitree_api | 0 .../parent_prefix_path/unitree_api | 1 + .../rosidl_interfaces/unitree_api | 16 + .../share/colcon-core/packages/unitree_api | 1 + ...ent_cmake_export_dependencies-extras.cmake | 92 + ...ke_export_include_directories-extras.cmake | 16 + .../ament_cmake_export_libraries-extras.cmake | 140 + .../ament_cmake_export_targets-extras.cmake | 27 + .../cmake/rosidl_cmake-extras.cmake | 4 + ..._export_typesupport_libraries-extras.cmake | 46 + ...ke_export_typesupport_targets-extras.cmake | 23 + .../cmake/unitree_apiConfig-version.cmake | 14 + .../unitree_api/cmake/unitree_apiConfig.cmake | 42 + ...i__rosidl_generator_cExport-noconfig.cmake | 19 + ...nitree_api__rosidl_generator_cExport.cmake | 99 + ...tree_api__rosidl_generator_cppExport.cmake | 99 + ..._rosidl_typesupport_cExport-noconfig.cmake | 19 + ...tree_api__rosidl_typesupport_cExport.cmake | 99 + ...osidl_typesupport_cppExport-noconfig.cmake | 19 + ...ee_api__rosidl_typesupport_cppExport.cmake | 99 + ...pport_introspection_cExport-noconfig.cmake | 19 + ...dl_typesupport_introspection_cExport.cmake | 114 + ...ort_introspection_cppExport-noconfig.cmake | 19 + ..._typesupport_introspection_cppExport.cmake | 98 + .../environment/ament_prefix_path.dsv | 1 + .../environment/ament_prefix_path.sh | 4 + .../unitree_api/environment/library_path.dsv | 1 + .../unitree_api/environment/library_path.sh | 16 + .../share/unitree_api/environment/path.dsv | 1 + .../share/unitree_api/environment/path.sh | 5 + .../unitree_api/environment/pythonpath.dsv | 1 + .../unitree_api/environment/pythonpath.sh | 3 + .../unitree_api/hook/cmake_prefix_path.dsv | 1 + .../unitree_api/hook/cmake_prefix_path.ps1 | 3 + .../unitree_api/hook/cmake_prefix_path.sh | 3 + .../unitree_api/hook/ld_library_path_lib.dsv | 1 + .../unitree_api/hook/ld_library_path_lib.ps1 | 3 + .../unitree_api/hook/ld_library_path_lib.sh | 3 + .../share/unitree_api/hook/pythonpath.dsv | 1 + .../share/unitree_api/hook/pythonpath.ps1 | 3 + .../share/unitree_api/hook/pythonpath.sh | 3 + .../share/unitree_api/local_setup.bash | 46 + .../share/unitree_api/local_setup.dsv | 4 + .../share/unitree_api/local_setup.sh | 135 + .../share/unitree_api/local_setup.zsh | 59 + .../share/unitree_api/msg/Request.idl | 17 + .../share/unitree_api/msg/Request.msg | 3 + .../share/unitree_api/msg/RequestHeader.idl | 19 + .../share/unitree_api/msg/RequestHeader.msg | 3 + .../share/unitree_api/msg/RequestIdentity.idl | 14 + .../share/unitree_api/msg/RequestIdentity.msg | 2 + .../share/unitree_api/msg/RequestLease.idl | 12 + .../share/unitree_api/msg/RequestLease.msg | 1 + .../share/unitree_api/msg/RequestPolicy.idl | 14 + .../share/unitree_api/msg/RequestPolicy.msg | 2 + .../share/unitree_api/msg/Response.idl | 17 + .../share/unitree_api/msg/Response.msg | 3 + .../share/unitree_api/msg/ResponseHeader.idl | 16 + .../share/unitree_api/msg/ResponseHeader.msg | 2 + .../share/unitree_api/msg/ResponseStatus.idl | 12 + .../share/unitree_api/msg/ResponseStatus.msg | 1 + .../msg/dds_connext/RequestHeader_.idl | 34 + .../msg/dds_connext/RequestIdentity_.idl | 30 + .../msg/dds_connext/RequestLease_.idl | 29 + .../msg/dds_connext/RequestPolicy_.idl | 30 + .../unitree_api/msg/dds_connext/Request_.idl | 33 + .../msg/dds_connext/ResponseHeader_.idl | 32 + .../msg/dds_connext/ResponseStatus_.idl | 29 + .../unitree_api/msg/dds_connext/Response_.idl | 33 + .../share/unitree_api/package.bash | 39 + .../unitree_api/share/unitree_api/package.dsv | 14 + .../unitree_api/share/unitree_api/package.ps1 | 118 + .../unitree_api/share/unitree_api/package.sh | 89 + .../unitree_api/share/unitree_api/package.xml | 23 + .../unitree_api/share/unitree_api/package.zsh | 50 + .../include/unitree_go/msg/audio_data.h | 12 + .../include/unitree_go/msg/audio_data.hpp | 12 + .../include/unitree_go/msg/bms_cmd.h | 12 + .../include/unitree_go/msg/bms_cmd.hpp | 12 + .../include/unitree_go/msg/bms_state.h | 12 + .../include/unitree_go/msg/bms_state.hpp | 12 + .../msg/detail/audio_data__builder.hpp | 71 + .../msg/detail/audio_data__functions.c | 254 + .../msg/detail/audio_data__functions.h | 177 + ...udio_data__rosidl_typesupport_fastrtps_c.h | 36 + ..._data__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...data__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/audio_data__struct.h | 45 + .../msg/detail/audio_data__struct.hpp | 142 + .../msg/detail/audio_data__traits.hpp | 42 + .../msg/detail/audio_data__type_support.c | 100 + .../msg/detail/audio_data__type_support.cpp | 149 + .../msg/detail/audio_data__type_support.h | 33 + .../msg/detail/audio_data__type_support.hpp | 31 + .../msg/detail/bms_cmd__builder.hpp | 71 + .../msg/detail/bms_cmd__functions.c | 243 + .../msg/detail/bms_cmd__functions.h | 177 + .../bms_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...s_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/bms_cmd__struct.h | 41 + .../unitree_go/msg/detail/bms_cmd__struct.hpp | 144 + .../unitree_go/msg/detail/bms_cmd__traits.hpp | 42 + .../msg/detail/bms_cmd__type_support.c | 96 + .../msg/detail/bms_cmd__type_support.cpp | 142 + .../msg/detail/bms_cmd__type_support.h | 33 + .../msg/detail/bms_cmd__type_support.hpp | 31 + .../msg/detail/bms_state__builder.hpp | 183 + .../msg/detail/bms_state__functions.c | 307 + .../msg/detail/bms_state__functions.h | 177 + ...bms_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/bms_state__struct.h | 48 + .../msg/detail/bms_state__struct.hpp | 244 + .../msg/detail/bms_state__traits.hpp | 42 + .../msg/detail/bms_state__type_support.c | 201 + .../msg/detail/bms_state__type_support.cpp | 287 + .../msg/detail/bms_state__type_support.h | 33 + .../msg/detail/bms_state__type_support.hpp | 31 + .../unitree_go/msg/detail/error__builder.hpp | 71 + .../unitree_go/msg/detail/error__functions.c | 239 + .../unitree_go/msg/detail/error__functions.h | 177 + .../error__rosidl_typesupport_fastrtps_c.h | 36 + ...error__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...rror__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/error__struct.h | 41 + .../unitree_go/msg/detail/error__struct.hpp | 144 + .../unitree_go/msg/detail/error__traits.hpp | 42 + .../msg/detail/error__type_support.c | 96 + .../msg/detail/error__type_support.cpp | 122 + .../msg/detail/error__type_support.h | 33 + .../msg/detail/error__type_support.hpp | 31 + .../detail/go2_front_video_data__builder.hpp | 103 + .../detail/go2_front_video_data__functions.c | 294 + .../detail/go2_front_video_data__functions.h | 177 + ...ideo_data__rosidl_typesupport_fastrtps_c.h | 36 + ..._data__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...data__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/go2_front_video_data__struct.h | 49 + .../detail/go2_front_video_data__struct.hpp | 166 + .../detail/go2_front_video_data__traits.hpp | 42 + .../go2_front_video_data__type_support.c | 132 + .../go2_front_video_data__type_support.cpp | 233 + .../go2_front_video_data__type_support.h | 33 + .../go2_front_video_data__type_support.hpp | 31 + .../msg/detail/height_map__builder.hpp | 151 + .../msg/detail/height_map__functions.c | 311 + .../msg/detail/height_map__functions.h | 177 + ...eight_map__rosidl_typesupport_fastrtps_c.h | 36 + ...t_map__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._map__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/height_map__struct.h | 52 + .../msg/detail/height_map__struct.hpp | 213 + .../msg/detail/height_map__traits.hpp | 42 + .../msg/detail/height_map__type_support.c | 177 + .../msg/detail/height_map__type_support.cpp | 244 + .../msg/detail/height_map__type_support.h | 33 + .../msg/detail/height_map__type_support.hpp | 31 + .../msg/detail/imu_state__builder.hpp | 119 + .../msg/detail/imu_state__functions.c | 279 + .../msg/detail/imu_state__functions.h | 177 + ...imu_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/imu_state__struct.h | 44 + .../msg/detail/imu_state__struct.hpp | 189 + .../msg/detail/imu_state__traits.hpp | 42 + .../msg/detail/imu_state__type_support.c | 141 + .../msg/detail/imu_state__type_support.cpp | 247 + .../msg/detail/imu_state__type_support.h | 33 + .../msg/detail/imu_state__type_support.hpp | 31 + .../msg/detail/interface_config__builder.hpp | 87 + .../msg/detail/interface_config__functions.c | 251 + .../msg/detail/interface_config__functions.h | 177 + ...ce_config__rosidl_typesupport_fastrtps_c.h | 36 + ...onfig__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...nfig__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/interface_config__struct.h | 42 + .../msg/detail/interface_config__struct.hpp | 158 + .../msg/detail/interface_config__traits.hpp | 42 + .../detail/interface_config__type_support.c | 111 + .../detail/interface_config__type_support.cpp | 157 + .../detail/interface_config__type_support.h | 33 + .../detail/interface_config__type_support.hpp | 31 + .../msg/detail/lidar_state__builder.hpp | 311 + .../msg/detail/lidar_state__functions.c | 402 ++ .../msg/detail/lidar_state__functions.h | 177 + ...dar_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/lidar_state__struct.h | 62 + .../msg/detail/lidar_state__struct.hpp | 357 ++ .../msg/detail/lidar_state__traits.hpp | 42 + .../msg/detail/lidar_state__type_support.c | 327 + .../msg/detail/lidar_state__type_support.cpp | 367 ++ .../msg/detail/lidar_state__type_support.h | 33 + .../msg/detail/lidar_state__type_support.hpp | 31 + .../msg/detail/low_cmd__builder.hpp | 263 + .../msg/detail/low_cmd__functions.c | 395 ++ .../msg/detail/low_cmd__functions.h | 177 + .../low_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...w_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/low_cmd__struct.h | 59 + .../unitree_go/msg/detail/low_cmd__struct.hpp | 324 + .../unitree_go/msg/detail/low_cmd__traits.hpp | 48 + .../msg/detail/low_cmd__type_support.c | 313 + .../msg/detail/low_cmd__type_support.cpp | 442 ++ .../msg/detail/low_cmd__type_support.h | 33 + .../msg/detail/low_cmd__type_support.hpp | 31 + .../msg/detail/low_state__builder.hpp | 391 ++ .../msg/detail/low_state__functions.c | 476 ++ .../msg/detail/low_state__functions.h | 177 + ...low_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/low_state__struct.h | 69 + .../msg/detail/low_state__struct.hpp | 439 ++ .../msg/detail/low_state__traits.hpp | 50 + .../msg/detail/low_state__type_support.c | 439 ++ .../msg/detail/low_state__type_support.cpp | 582 ++ .../msg/detail/low_state__type_support.h | 33 + .../msg/detail/low_state__type_support.hpp | 31 + .../msg/detail/motor_cmd__builder.hpp | 151 + .../msg/detail/motor_cmd__functions.c | 283 + .../msg/detail/motor_cmd__functions.h | 177 + ...motor_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...r_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/motor_cmd__struct.h | 46 + .../msg/detail/motor_cmd__struct.hpp | 214 + .../msg/detail/motor_cmd__traits.hpp | 42 + .../msg/detail/motor_cmd__type_support.c | 171 + .../msg/detail/motor_cmd__type_support.cpp | 217 + .../msg/detail/motor_cmd__type_support.h | 33 + .../msg/detail/motor_cmd__type_support.hpp | 31 + .../msg/detail/motor_state__builder.hpp | 215 + .../msg/detail/motor_state__functions.c | 315 + .../msg/detail/motor_state__functions.h | 177 + ...tor_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/motor_state__struct.h | 50 + .../msg/detail/motor_state__struct.hpp | 270 + .../msg/detail/motor_state__traits.hpp | 42 + .../msg/detail/motor_state__type_support.c | 231 + .../msg/detail/motor_state__type_support.cpp | 277 + .../msg/detail/motor_state__type_support.h | 33 + .../msg/detail/motor_state__type_support.hpp | 31 + .../msg/detail/path_point__builder.hpp | 151 + .../msg/detail/path_point__functions.c | 279 + .../msg/detail/path_point__functions.h | 177 + ...ath_point__rosidl_typesupport_fastrtps_c.h | 36 + ...point__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...oint__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/path_point__struct.h | 46 + .../msg/detail/path_point__struct.hpp | 214 + .../msg/detail/path_point__traits.hpp | 42 + .../msg/detail/path_point__type_support.c | 171 + .../msg/detail/path_point__type_support.cpp | 197 + .../msg/detail/path_point__type_support.h | 33 + .../msg/detail/path_point__type_support.hpp | 31 + .../unitree_go/msg/detail/req__builder.hpp | 71 + .../unitree_go/msg/detail/req__functions.c | 266 + .../unitree_go/msg/detail/req__functions.h | 177 + .../req__rosidl_typesupport_fastrtps_c.h | 36 + .../req__rosidl_typesupport_fastrtps_cpp.hpp | 79 + .../req__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/req__struct.h | 46 + .../unitree_go/msg/detail/req__struct.hpp | 145 + .../unitree_go/msg/detail/req__traits.hpp | 42 + .../unitree_go/msg/detail/req__type_support.c | 101 + .../msg/detail/req__type_support.cpp | 122 + .../unitree_go/msg/detail/req__type_support.h | 33 + .../msg/detail/req__type_support.hpp | 31 + .../unitree_go/msg/detail/res__builder.hpp | 87 + .../unitree_go/msg/detail/res__functions.c | 287 + .../unitree_go/msg/detail/res__functions.h | 177 + .../res__rosidl_typesupport_fastrtps_c.h | 36 + .../res__rosidl_typesupport_fastrtps_cpp.hpp | 79 + .../res__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/res__struct.h | 49 + .../unitree_go/msg/detail/res__struct.hpp | 157 + .../unitree_go/msg/detail/res__traits.hpp | 42 + .../unitree_go/msg/detail/res__type_support.c | 118 + .../msg/detail/res__type_support.cpp | 164 + .../unitree_go/msg/detail/res__type_support.h | 33 + .../msg/detail/res__type_support.hpp | 31 + .../msg/detail/sport_mode_cmd__builder.hpp | 215 + .../msg/detail/sport_mode_cmd__functions.c | 359 ++ .../msg/detail/sport_mode_cmd__functions.h | 177 + ..._mode_cmd__rosidl_typesupport_fastrtps_c.h | 36 + ...e_cmd__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ..._cmd__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/sport_mode_cmd__struct.h | 56 + .../msg/detail/sport_mode_cmd__struct.hpp | 279 + .../msg/detail/sport_mode_cmd__traits.hpp | 48 + .../msg/detail/sport_mode_cmd__type_support.c | 268 + .../detail/sport_mode_cmd__type_support.cpp | 337 ++ .../msg/detail/sport_mode_cmd__type_support.h | 33 + .../detail/sport_mode_cmd__type_support.hpp | 31 + .../msg/detail/sport_mode_state__builder.hpp | 279 + .../msg/detail/sport_mode_state__functions.c | 395 ++ .../msg/detail/sport_mode_state__functions.h | 177 + ...ode_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/sport_mode_state__struct.h | 60 + .../msg/detail/sport_mode_state__struct.hpp | 337 ++ .../msg/detail/sport_mode_state__traits.hpp | 48 + .../detail/sport_mode_state__type_support.c | 305 + .../detail/sport_mode_state__type_support.cpp | 437 ++ .../detail/sport_mode_state__type_support.h | 33 + .../detail/sport_mode_state__type_support.hpp | 31 + .../msg/detail/time_spec__builder.hpp | 71 + .../msg/detail/time_spec__functions.c | 239 + .../msg/detail/time_spec__functions.h | 177 + ...time_spec__rosidl_typesupport_fastrtps_c.h | 36 + ..._spec__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...spec__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/time_spec__struct.h | 41 + .../msg/detail/time_spec__struct.hpp | 144 + .../msg/detail/time_spec__traits.hpp | 42 + .../msg/detail/time_spec__type_support.c | 96 + .../msg/detail/time_spec__type_support.cpp | 122 + .../msg/detail/time_spec__type_support.h | 33 + .../msg/detail/time_spec__type_support.hpp | 31 + .../msg/detail/uwb_state__builder.hpp | 311 + .../msg/detail/uwb_state__functions.c | 367 ++ .../msg/detail/uwb_state__functions.h | 177 + ...uwb_state__rosidl_typesupport_fastrtps_c.h | 36 + ...state__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...tate__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../unitree_go/msg/detail/uwb_state__struct.h | 56 + .../msg/detail/uwb_state__struct.hpp | 355 ++ .../msg/detail/uwb_state__traits.hpp | 42 + .../msg/detail/uwb_state__type_support.c | 321 + .../msg/detail/uwb_state__type_support.cpp | 387 ++ .../msg/detail/uwb_state__type_support.h | 33 + .../msg/detail/uwb_state__type_support.hpp | 31 + .../msg/detail/uwb_switch__builder.hpp | 55 + .../msg/detail/uwb_switch__functions.c | 231 + .../msg/detail/uwb_switch__functions.h | 177 + ...wb_switch__rosidl_typesupport_fastrtps_c.h | 36 + ...witch__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...itch__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/uwb_switch__struct.h | 40 + .../msg/detail/uwb_switch__struct.hpp | 130 + .../msg/detail/uwb_switch__traits.hpp | 42 + .../msg/detail/uwb_switch__type_support.c | 81 + .../msg/detail/uwb_switch__type_support.cpp | 107 + .../msg/detail/uwb_switch__type_support.h | 33 + .../msg/detail/uwb_switch__type_support.hpp | 31 + .../detail/wireless_controller__builder.hpp | 119 + .../detail/wireless_controller__functions.c | 263 + .../detail/wireless_controller__functions.h | 177 + ...ontroller__rosidl_typesupport_fastrtps_c.h | 36 + ...oller__rosidl_typesupport_fastrtps_cpp.hpp | 79 + ...ller__rosidl_typesupport_introspection_c.h | 26 + ...__rosidl_typesupport_introspection_cpp.hpp | 27 + .../msg/detail/wireless_controller__struct.h | 44 + .../detail/wireless_controller__struct.hpp | 186 + .../detail/wireless_controller__traits.hpp | 42 + .../wireless_controller__type_support.c | 141 + .../wireless_controller__type_support.cpp | 167 + .../wireless_controller__type_support.h | 33 + .../wireless_controller__type_support.hpp | 31 + .../unitree_go/include/unitree_go/msg/error.h | 12 + .../include/unitree_go/msg/error.hpp | 12 + .../unitree_go/msg/go2_front_video_data.h | 12 + .../unitree_go/msg/go2_front_video_data.hpp | 12 + .../include/unitree_go/msg/height_map.h | 12 + .../include/unitree_go/msg/height_map.hpp | 12 + .../include/unitree_go/msg/imu_state.h | 12 + .../include/unitree_go/msg/imu_state.hpp | 12 + .../include/unitree_go/msg/interface_config.h | 12 + .../unitree_go/msg/interface_config.hpp | 12 + .../include/unitree_go/msg/lidar_state.h | 12 + .../include/unitree_go/msg/lidar_state.hpp | 12 + .../include/unitree_go/msg/low_cmd.h | 12 + .../include/unitree_go/msg/low_cmd.hpp | 12 + .../include/unitree_go/msg/low_state.h | 12 + .../include/unitree_go/msg/low_state.hpp | 12 + .../include/unitree_go/msg/motor_cmd.h | 12 + .../include/unitree_go/msg/motor_cmd.hpp | 12 + .../include/unitree_go/msg/motor_state.h | 12 + .../include/unitree_go/msg/motor_state.hpp | 12 + .../include/unitree_go/msg/path_point.h | 12 + .../include/unitree_go/msg/path_point.hpp | 12 + .../unitree_go/include/unitree_go/msg/req.h | 12 + .../unitree_go/include/unitree_go/msg/req.hpp | 12 + .../unitree_go/include/unitree_go/msg/res.h | 12 + .../unitree_go/include/unitree_go/msg/res.hpp | 12 + .../rosidl_generator_c__visibility_control.h | 42 + ...sidl_generator_cpp__visibility_control.hpp | 42 + ...pesupport_fastrtps_c__visibility_control.h | 43 + ...support_fastrtps_cpp__visibility_control.h | 43 + ...port_introspection_c__visibility_control.h | 43 + .../include/unitree_go/msg/sport_mode_cmd.h | 12 + .../include/unitree_go/msg/sport_mode_cmd.hpp | 12 + .../include/unitree_go/msg/sport_mode_state.h | 12 + .../unitree_go/msg/sport_mode_state.hpp | 12 + .../include/unitree_go/msg/time_spec.h | 12 + .../include/unitree_go/msg/time_spec.hpp | 12 + .../include/unitree_go/msg/uwb_state.h | 12 + .../include/unitree_go/msg/uwb_state.hpp | 12 + .../include/unitree_go/msg/uwb_switch.h | 12 + .../include/unitree_go/msg/uwb_switch.hpp | 12 + .../unitree_go/msg/wireless_controller.h | 12 + .../unitree_go/msg/wireless_controller.hpp | 12 + .../site-packages/unitree_go/__init__.py | 0 .../site-packages/unitree_go/msg/__init__.py | 22 + .../unitree_go/msg/_audio_data.py | 161 + .../unitree_go/msg/_audio_data_s.c | 221 + .../site-packages/unitree_go/msg/_bms_cmd.py | 168 + .../site-packages/unitree_go/msg/_bms_cmd_s.c | 143 + .../unitree_go/msg/_bms_state.py | 357 ++ .../unitree_go/msg/_bms_state_s.c | 327 + .../site-packages/unitree_go/msg/_error.py | 145 + .../site-packages/unitree_go/msg/_error_s.c | 118 + .../unitree_go/msg/_go2_front_video_data.py | 231 + .../unitree_go/msg/_go2_front_video_data_s.c | 461 ++ .../unitree_go/msg/_height_map.py | 283 + .../unitree_go/msg/_height_map_s.c | 357 ++ .../unitree_go/msg/_imu_state.py | 294 + .../unitree_go/msg/_imu_state_s.c | 269 + .../unitree_go/msg/_interface_config.py | 189 + .../unitree_go/msg/_interface_config_s.c | 163 + .../unitree_go/msg/_lidar_state.py | 461 ++ .../unitree_go/msg/_lidar_state_s.c | 482 ++ .../site-packages/unitree_go/msg/_low_cmd.py | 547 ++ .../site-packages/unitree_go/msg/_low_cmd_s.c | 535 ++ .../unitree_go/msg/_low_state.py | 734 +++ .../unitree_go/msg/_low_state_s.c | 724 +++ .../unitree_go/msg/_motor_cmd.py | 263 + .../unitree_go/msg/_motor_cmd_s.c | 243 + .../unitree_go/msg/_motor_state.py | 343 ++ .../unitree_go/msg/_motor_state_s.c | 323 + .../unitree_go/msg/_path_point.py | 236 + .../unitree_go/msg/_path_point_s.c | 218 + .../site-packages/unitree_go/msg/_req.py | 141 + .../site-packages/unitree_go/msg/_req_s.c | 145 + .../site-packages/unitree_go/msg/_res.py | 178 + .../site-packages/unitree_go/msg/_res_s.c | 268 + .../unitree_go/msg/_sport_mode_cmd.py | 415 ++ .../unitree_go/msg/_sport_mode_cmd_s.c | 409 ++ .../unitree_go/msg/_sport_mode_state.py | 546 ++ .../unitree_go/msg/_sport_mode_state_s.c | 527 ++ .../unitree_go/msg/_time_spec.py | 145 + .../unitree_go/msg/_time_spec_s.c | 118 + .../unitree_go/msg/_uwb_state.py | 484 ++ .../unitree_go/msg/_uwb_state_s.c | 465 ++ .../unitree_go/msg/_uwb_switch.py | 124 + .../unitree_go/msg/_uwb_switch_s.c | 98 + .../unitree_go/msg/_wireless_controller.py | 200 + .../unitree_go/msg/_wireless_controller_s.c | 178 + .../package_run_dependencies/unitree_go | 1 + .../resource_index/packages/unitree_go | 0 .../parent_prefix_path/unitree_go | 1 + .../rosidl_interfaces/unitree_go | 44 + .../share/colcon-core/packages/unitree_go | 1 + ...ent_cmake_export_dependencies-extras.cmake | 92 + ...ke_export_include_directories-extras.cmake | 16 + .../ament_cmake_export_libraries-extras.cmake | 140 + .../ament_cmake_export_targets-extras.cmake | 27 + .../cmake/rosidl_cmake-extras.cmake | 4 + ..._export_typesupport_libraries-extras.cmake | 46 + ...ke_export_typesupport_targets-extras.cmake | 23 + .../cmake/unitree_goConfig-version.cmake | 14 + .../unitree_go/cmake/unitree_goConfig.cmake | 42 + ...o__rosidl_generator_cExport-noconfig.cmake | 19 + ...unitree_go__rosidl_generator_cExport.cmake | 99 + ...itree_go__rosidl_generator_cppExport.cmake | 99 + ..._rosidl_typesupport_cExport-noconfig.cmake | 19 + ...itree_go__rosidl_typesupport_cExport.cmake | 99 + ...osidl_typesupport_cppExport-noconfig.cmake | 19 + ...ree_go__rosidl_typesupport_cppExport.cmake | 99 + ...pport_introspection_cExport-noconfig.cmake | 19 + ...dl_typesupport_introspection_cExport.cmake | 114 + ...ort_introspection_cppExport-noconfig.cmake | 19 + ..._typesupport_introspection_cppExport.cmake | 98 + .../environment/ament_prefix_path.dsv | 1 + .../environment/ament_prefix_path.sh | 4 + .../unitree_go/environment/library_path.dsv | 1 + .../unitree_go/environment/library_path.sh | 16 + .../share/unitree_go/environment/path.dsv | 1 + .../share/unitree_go/environment/path.sh | 5 + .../unitree_go/environment/pythonpath.dsv | 1 + .../unitree_go/environment/pythonpath.sh | 3 + .../unitree_go/hook/cmake_prefix_path.dsv | 1 + .../unitree_go/hook/cmake_prefix_path.ps1 | 3 + .../unitree_go/hook/cmake_prefix_path.sh | 3 + .../unitree_go/hook/ld_library_path_lib.dsv | 1 + .../unitree_go/hook/ld_library_path_lib.ps1 | 3 + .../unitree_go/hook/ld_library_path_lib.sh | 3 + .../share/unitree_go/hook/pythonpath.dsv | 1 + .../share/unitree_go/hook/pythonpath.ps1 | 3 + .../share/unitree_go/hook/pythonpath.sh | 3 + .../share/unitree_go/local_setup.bash | 46 + .../share/unitree_go/local_setup.dsv | 4 + .../share/unitree_go/local_setup.sh | 135 + .../share/unitree_go/local_setup.zsh | 59 + .../share/unitree_go/msg/AudioData.idl | 14 + .../share/unitree_go/msg/AudioData.msg | 2 + .../share/unitree_go/msg/BmsCmd.idl | 15 + .../share/unitree_go/msg/BmsCmd.msg | 2 + .../share/unitree_go/msg/BmsState.idl | 30 + .../share/unitree_go/msg/BmsState.msg | 9 + .../unitree_go/share/unitree_go/msg/Error.idl | 14 + .../unitree_go/share/unitree_go/msg/Error.msg | 2 + .../unitree_go/msg/Go2FrontVideoData.idl | 18 + .../unitree_go/msg/Go2FrontVideoData.msg | 4 + .../share/unitree_go/msg/HeightMap.idl | 49 + .../share/unitree_go/msg/HeightMap.msg | 15 + .../share/unitree_go/msg/IMUState.idl | 22 + .../share/unitree_go/msg/IMUState.msg | 5 + .../share/unitree_go/msg/InterfaceConfig.idl | 17 + .../share/unitree_go/msg/InterfaceConfig.msg | 3 + .../share/unitree_go/msg/LidarState.idl | 45 + .../share/unitree_go/msg/LidarState.msg | 17 + .../share/unitree_go/msg/LowCmd.idl | 46 + .../share/unitree_go/msg/LowCmd.msg | 15 + .../share/unitree_go/msg/LowState.idl | 64 + .../share/unitree_go/msg/LowState.msg | 22 + .../share/unitree_go/msg/MotorCmd.idl | 25 + .../share/unitree_go/msg/MotorCmd.msg | 7 + .../share/unitree_go/msg/MotorState.idl | 33 + .../share/unitree_go/msg/MotorState.msg | 11 + .../share/unitree_go/msg/PathPoint.idl | 24 + .../share/unitree_go/msg/PathPoint.msg | 7 + .../unitree_go/share/unitree_go/msg/Req.idl | 14 + .../unitree_go/share/unitree_go/msg/Req.msg | 2 + .../unitree_go/share/unitree_go/msg/Res.idl | 16 + .../unitree_go/share/unitree_go/msg/Res.msg | 3 + .../share/unitree_go/msg/SportModeCmd.idl | 38 + .../share/unitree_go/msg/SportModeCmd.msg | 13 + .../share/unitree_go/msg/SportModeState.idl | 46 + .../share/unitree_go/msg/SportModeState.msg | 17 + .../share/unitree_go/msg/TimeSpec.idl | 19 + .../share/unitree_go/msg/TimeSpec.msg | 5 + .../share/unitree_go/msg/UwbState.idl | 46 + .../share/unitree_go/msg/UwbState.msg | 19 + .../share/unitree_go/msg/UwbSwitch.idl | 12 + .../share/unitree_go/msg/UwbSwitch.msg | 1 + .../unitree_go/msg/WirelessController.idl | 20 + .../unitree_go/msg/WirelessController.msg | 5 + .../unitree_go/msg/dds_connext/AudioData_.idl | 31 + .../unitree_go/msg/dds_connext/BmsCmd_.idl | 31 + .../unitree_go/msg/dds_connext/BmsState_.idl | 40 + .../unitree_go/msg/dds_connext/Error_.idl | 30 + .../msg/dds_connext/Go2FrontVideoData_.idl | 35 + .../unitree_go/msg/dds_connext/HeightMap_.idl | 37 + .../unitree_go/msg/dds_connext/IMUState_.idl | 37 + .../msg/dds_connext/InterfaceConfig_.idl | 32 + .../msg/dds_connext/LidarState_.idl | 46 + .../unitree_go/msg/dds_connext/LowCmd_.idl | 51 + .../unitree_go/msg/dds_connext/LowState_.idl | 61 + .../unitree_go/msg/dds_connext/MotorCmd_.idl | 36 + .../msg/dds_connext/MotorState_.idl | 40 + .../unitree_go/msg/dds_connext/PathPoint_.idl | 35 + .../share/unitree_go/msg/dds_connext/Req_.idl | 30 + .../share/unitree_go/msg/dds_connext/Res_.idl | 32 + .../msg/dds_connext/SportModeCmd_.idl | 45 + .../msg/dds_connext/SportModeState_.idl | 51 + .../unitree_go/msg/dds_connext/TimeSpec_.idl | 30 + .../unitree_go/msg/dds_connext/UwbState_.idl | 47 + .../unitree_go/msg/dds_connext/UwbSwitch_.idl | 29 + .../msg/dds_connext/WirelessController_.idl | 33 + .../unitree_go/share/unitree_go/package.bash | 39 + .../unitree_go/share/unitree_go/package.dsv | 14 + .../unitree_go/share/unitree_go/package.ps1 | 118 + .../unitree_go/share/unitree_go/package.sh | 89 + .../unitree_go/share/unitree_go/package.xml | 23 + .../unitree_go/share/unitree_go/package.zsh | 50 + deploy/robot_ws/log/COLCON_IGNORE | 0 deploy/robot_ws/log/latest | 1 + deploy/robot_ws/log/latest_build | 1 + deploy/robot_ws/src/go2py_node/CMakeLists.txt | 74 + .../src/go2py_node/include/common/motor_crc.h | 87 + .../include/common/ros2_sport_client.h | 231 + .../include/nlohmann/adl_serializer.hpp | 55 + .../nlohmann/byte_container_with_subtype.hpp | 103 + .../include/nlohmann/detail/abi_macros.hpp | 100 + .../nlohmann/detail/conversions/from_json.hpp | 497 ++ .../nlohmann/detail/conversions/to_chars.hpp | 1118 ++++ .../nlohmann/detail/conversions/to_json.hpp | 446 ++ .../include/nlohmann/detail/exceptions.hpp | 258 + .../include/nlohmann/detail/hash.hpp | 129 + .../nlohmann/detail/input/binary_reader.hpp | 3010 ++++++++++ .../nlohmann/detail/input/input_adapters.hpp | 494 ++ .../nlohmann/detail/input/json_sax.hpp | 728 +++ .../include/nlohmann/detail/input/lexer.hpp | 1632 +++++ .../include/nlohmann/detail/input/parser.hpp | 507 ++ .../nlohmann/detail/input/position_t.hpp | 37 + .../detail/iterators/internal_iterator.hpp | 35 + .../nlohmann/detail/iterators/iter_impl.hpp | 751 +++ .../detail/iterators/iteration_proxy.hpp | 242 + .../detail/iterators/iterator_traits.hpp | 61 + .../iterators/json_reverse_iterator.hpp | 130 + .../detail/iterators/primitive_iterator.hpp | 132 + .../detail/json_custom_base_class.hpp | 31 + .../include/nlohmann/detail/json_pointer.hpp | 988 ++++ .../include/nlohmann/detail/json_ref.hpp | 78 + .../include/nlohmann/detail/macro_scope.hpp | 469 ++ .../include/nlohmann/detail/macro_unscope.hpp | 44 + .../nlohmann/detail/meta/call_std/begin.hpp | 17 + .../nlohmann/detail/meta/call_std/end.hpp | 17 + .../nlohmann/detail/meta/cpp_future.hpp | 171 + .../include/nlohmann/detail/meta/detected.hpp | 70 + .../nlohmann/detail/meta/identity_tag.hpp | 21 + .../include/nlohmann/detail/meta/is_sax.hpp | 159 + .../include/nlohmann/detail/meta/std_fs.hpp | 29 + .../nlohmann/detail/meta/type_traits.hpp | 740 +++ .../include/nlohmann/detail/meta/void_t.hpp | 24 + .../nlohmann/detail/output/binary_writer.hpp | 1838 ++++++ .../detail/output/output_adapters.hpp | 147 + .../nlohmann/detail/output/serializer.hpp | 988 ++++ .../include/nlohmann/detail/string_concat.hpp | 146 + .../include/nlohmann/detail/string_escape.hpp | 72 + .../include/nlohmann/detail/value_t.hpp | 118 + .../src/go2py_node/include/nlohmann/json.hpp | 5254 +++++++++++++++++ .../go2py_node/include/nlohmann/json_fwd.hpp | 75 + .../include/nlohmann/ordered_map.hpp | 359 ++ .../nlohmann/thirdparty/hedley/hedley.hpp | 2045 +++++++ .../thirdparty/hedley/hedley_undef.hpp | 158 + deploy/robot_ws/src/go2py_node/package.xml | 24 + deploy/robot_ws/src/go2py_node/src/bridge.cpp | 258 + .../src/go2py_node/src/common/motor_crc.cpp | 75 + .../src/common/ros2_sport_client.cpp | 192 + .../src/unitree/unitree_api/CMakeLists.txt | 64 + .../src/unitree/unitree_api/msg/Request.msg | 3 + .../unitree/unitree_api/msg/RequestHeader.msg | 3 + .../unitree_api/msg/RequestIdentity.msg | 2 + .../unitree/unitree_api/msg/RequestLease.msg | 1 + .../unitree/unitree_api/msg/RequestPolicy.msg | 2 + .../src/unitree/unitree_api/msg/Response.msg | 3 + .../unitree_api/msg/ResponseHeader.msg | 2 + .../unitree_api/msg/ResponseStatus.msg | 1 + .../src/unitree/unitree_api/package.xml | 23 + .../src/unitree/unitree_go/CMakeLists.txt | 77 + .../src/unitree/unitree_go/msg/AudioData.msg | 2 + .../src/unitree/unitree_go/msg/BmsCmd.msg | 2 + .../src/unitree/unitree_go/msg/BmsState.msg | 9 + .../src/unitree/unitree_go/msg/Error.msg | 2 + .../unitree_go/msg/Go2FrontVideoData.msg | 4 + .../src/unitree/unitree_go/msg/HeightMap.msg | 15 + .../src/unitree/unitree_go/msg/IMUState.msg | 5 + .../unitree_go/msg/InterfaceConfig.msg | 3 + .../src/unitree/unitree_go/msg/LidarState.msg | 17 + .../src/unitree/unitree_go/msg/LowCmd.msg | 15 + .../src/unitree/unitree_go/msg/LowState.msg | 22 + .../src/unitree/unitree_go/msg/MotorCmd.msg | 7 + .../src/unitree/unitree_go/msg/MotorState.msg | 11 + .../src/unitree/unitree_go/msg/PathPoint.msg | 7 + .../src/unitree/unitree_go/msg/Req.msg | 2 + .../src/unitree/unitree_go/msg/Res.msg | 3 + .../unitree/unitree_go/msg/SportModeCmd.msg | 13 + .../unitree/unitree_go/msg/SportModeState.msg | 17 + .../src/unitree/unitree_go/msg/TimeSpec.msg | 5 + .../src/unitree/unitree_go/msg/UwbState.msg | 19 + .../src/unitree/unitree_go/msg/UwbSwitch.msg | 1 + .../unitree_go/msg/WirelessController.msg | 5 + .../src/unitree/unitree_go/package.xml | 23 + 1738 files changed, 96191 insertions(+) rename {cpp_bridge => deploy/dds_bridge}/CMakeLists.txt (100%) rename {cpp_bridge => deploy/dds_bridge}/include/go2py/Imu.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/go2py/Imu.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/go2py/LowCmd.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/go2py/LowCmd.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/go2py/LowState.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/go2py/LowState.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/any.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/assert.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/block_queue.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_callback.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_easy_model.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_entity.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_exception.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_factory_model.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_native.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_parameter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_qos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_qos_parameter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_qos_policy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_qos_policy_parameter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_qos_realize.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_topic_channel.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/dds/dds_traits.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/decl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/exception.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/filesystem/directory.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/filesystem/file.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/filesystem/filesystem.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/json/json.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/json/json_config.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/json/jsonize.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/lock/lock.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_buffer.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_decl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_initor.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_keeper.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_logger.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_policy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_store.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/log/log_writer.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/os.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/service/base/service_application.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/service/base/service_base.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/service/base/service_config.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/service/base/service_decl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/service/dds_service.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/socket/domain_socket.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/socket/socket.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/string_tool.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/thread/future.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/thread/recurrent_thread.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/thread/thread.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/thread/thread_decl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/thread/thread_pool.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/thread/thread_task.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/time/sleep.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/common/time/time_tool.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/AudioData_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/BmsCmd_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/BmsState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/ConfigChangeStatus_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/Error_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/Go2FrontVideoData_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/HeightMap_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/IMUState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/InterfaceConfig_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/LidarState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/LowCmd_.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/LowCmd_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/LowState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/MotorCmd_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/MotorState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/PathPoint_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/Req_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/Res_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/SportModeCmd_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/SportModeState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/TimeSpec_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/UwbState_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/UwbSwitch_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/go2/WirelessController_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Header_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/MapMetaData_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/OccupancyGrid_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Odometry_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Point32_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/PointCloud2_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/PointField_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/PointStamped_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Point_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Pose2D_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/PoseStamped_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/PoseWithCovarianceStamped_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/PoseWithCovariance_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Pose_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/QuaternionStamped_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Quaternion_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/String_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Time_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/TwistStamped_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/TwistWithCovarianceStamped_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/TwistWithCovariance_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Twist_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/idl/ros2/Vector3_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/back_video/back_video_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/back_video/back_video_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/back_video/back_video_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/config/config_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/config/config_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/config/config_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/front_video/front_video_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/front_video/front_video_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/front_video/front_video_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/motion_switcher/motion_switcher_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/motion_switcher/motion_switcher_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/motion_switcher/motion_switcher_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/robot_state/robot_state_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/robot_state/robot_state_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/robot_state/robot_state_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/sport/sport_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/sport/sport_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/b2/sport/sport_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/channel/channel_factory.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/channel/channel_labor.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/channel/channel_namer.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/channel/channel_publisher.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/channel/channel_subscriber.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/client/client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/client/client_base.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/client/client_stub.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/client/lease_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/future/request_future.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/public/jsonize_type.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/robot_state/robot_state_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/robot_state/robot_state_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/robot_state/robot_state_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/sport/sport_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/sport/sport_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/sport/sport_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/utrack/utrack_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/utrack/utrack_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/video/video_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/video/video_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/video/video_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/vui/vui_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/vui/vui_client.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/go2/vui/vui_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_api.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_error.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/RequestHeader_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/RequestIdentity_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/RequestLease_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/RequestPolicy_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/Request_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/ResponseHeader_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/ResponseStatus_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_idl_decl/Response_.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/internal/internal_request_response.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/serialize/serialize.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/server/lease_server.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/server/server.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/server/server_base.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/unitree/robot/server/server_stub.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/utils/dds_publisher.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/include/utils/dds_subscriber.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/install.sh (100%) rename {cpp_bridge => deploy/dds_bridge}/lib/aarch64/libunitree_sdk2.a (100%) rename {cpp_bridge => deploy/dds_bridge}/lib/x86_64/libunitree_sdk2.a (100%) rename {cpp_bridge => deploy/dds_bridge}/src/high_level/follow_sin.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/src/high_level/sportmode_test.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/src/lowlevel/bridge.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/src/simple_test.cpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/config.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/dds.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_basic_types.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_data_allocator.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_internal_api.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_loan_api.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_opcodes.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_alloc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_error.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_impl.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_listener.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_qos.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_qosdefs.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_public_status.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_rhc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsc/dds_statistics.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_acknack.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_builtin_topic_if.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_cdrstream.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_cfgelems.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_cfgunits.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_config.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_config_impl.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_deadline.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_deliver_locally.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_domaingv.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_endpoint.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_entity.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_entity_index.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_entity_match.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_guid.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_handshake.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_iid.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_ipaddr.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_keyhash.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_lifespan.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_list_genptr.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_list_tmpl.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_locator.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_mcgroup.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_ownip.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_participant.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_plist.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_plist_generic.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_pmd.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_portmapping.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_proxy_endpoint.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_proxy_participant.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_raweth.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_rhc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_security_exchange.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_security_msg.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_security_omg.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_security_util.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_serdata.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_serdata_default.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_serdata_plist.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_serdata_pserop.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_sertopic.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_sertype.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_shm_transport.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_ssl.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_statistics.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_tcp.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_threadmon.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_time.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_tkmap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_topic.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_tran.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_typebuilder.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_typelib.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_typelookup.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_typewrap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_udp.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_vendor.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_vnet.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_wraddrset.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xqos.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_impl.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.idl (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.idl (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_typemap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/ddsi_xt_typemap.idl (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_addrset.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_bitset.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_bswap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_ddsi_discovery.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_debmon.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_feature_check.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_freelist.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_gc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_hbcontrol.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_init.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_inverse_uint32_set.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_lat_estim.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_lease.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_log.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_misc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_pcap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_protocol.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_qosmatch.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_radmin.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_receive.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_rtps.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_sockwaitset.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_thread.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_transmit.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_unused.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_whc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_xevent.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/q_xmsg.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsi/sysdeps.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/align.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/arch.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/atomics.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/atomics/arm.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/atomics/gcc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/atomics/msvc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/atomics/sun.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/attributes.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/avl.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/bswap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/cdtors.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/circlist.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/countargs.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/dynlib.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/endian.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/environ.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/expand_vars.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/fibheap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/filesystem.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/filesystem/posix.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/filesystem/windows.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/heap.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/hopscotch.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/ifaddrs.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/io.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/iovec.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/log.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/md5.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/mh3.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/misc.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/netstat.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/process.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/random.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/retcode.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/rusage.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sched.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sockets.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sockets/posix.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sockets/windows.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/static_assert.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/string.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/strtod.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/strtol.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sync.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sync/freertos.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sync/posix.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/sync/windows.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/threads.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/threads/freertos.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/threads/posix.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/threads/windows.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/time.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/time/freertos.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/types.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/types/posix.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/types/vxworks.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/types/windows.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/ddsrt/xmlparser.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/export.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/features.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/dds/version.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddsc/dds.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/LICENSE (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/BuiltinTopicTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Duration.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Entity.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Exception.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/External.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/InstanceHandle.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/LengthUnlimited.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Optional.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/QosProvider.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Reference.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/SafeEnumeration.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/TBuiltinTopicTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/TEntity.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/TEntityQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/TInstanceHandle.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/TQosProvider.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Time.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/Value.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/WeakReference.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/array.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/Condition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/GuardCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/StatusCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/TCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/TGuardCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/TStatusCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/TWaitSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/WaitSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/Condition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/GuardCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/StatusCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/TConditionImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/TGuardConditionImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/TStatusConditionImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/TWaitSetImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/cond/detail/WaitSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/conformance.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/ddscore.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/BuiltinTopicTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/Entity.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/InstanceHandle.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/QosProvider.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/ReferenceImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/TEntityImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/TEntityQosImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/TInstanceHandleImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/TQosProviderImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/Value.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/WeakReferenceImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/array.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/conformance.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/ddscore.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/export.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/inttypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/macros.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/module_docs.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/old_win_stdint.h (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/detail/ref_traits.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/macros.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/CorePolicy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/PolicyKind.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/QosPolicyCount.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/TCorePolicy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/TQosPolicyCount.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/detail/CorePolicy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/detail/QosPolicyCount.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/detail/TCorePolicyImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/policy/detail/TQosPolicyCountImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/ref_traits.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/refmacros.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/status/State.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/status/Status.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/status/TStatus.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/status/detail/Status.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/status/detail/TStatusImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/types.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/Annotations.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/CollectionTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/DynamicData.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/DynamicType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/MemberType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/PrimitiveTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/StructType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TAnnotation.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TCollectionTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicData.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TMemberType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TStructType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TTypeProvider.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TypeKind.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/TypeProvider.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/UnionCase.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/UnionType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/Annotation.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/CollectionTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicData.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/MemberType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/PrimitiveTypes.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/StructType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/TypeProvider.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionCase.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionType.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/dds.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/DomainParticipant.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/DomainParticipantListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/TDomainParticipant.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/ddsdomain.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/detail/DomainParticipant.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/detail/TDomainParticipantImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/detail/ddsdomain.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/qos/DomainParticipantQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/domain/qos/detail/DomainParticipantQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/features.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/AnyDataWriter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/AnyDataWriterListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/CoherentSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/DataWriter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/DataWriterListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/Publisher.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/PublisherListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/SuspendedPublication.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/TAnyDataWriter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/TCoherentSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/TPublisher.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/TSuspendedPublication.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/ddspub.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/AnyDataWriter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/CoherentSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/DataWriter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/DataWriterImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/Publisher.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/SuspendedPublication.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/TAnyDataWriterImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/TCoherentSetImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/TPublisherImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/TSuspendedPublicationImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/ddspub.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/detail/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/qos/DataWriterQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/qos/PublisherQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/qos/detail/DataWriterQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/pub/qos/detail/PublisherQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/AnyDataReader.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/AnyDataReaderListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/CoherentAccess.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/DataReader.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/DataReaderListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/GenerationCount.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/LoanedSamples.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/Query.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/Rank.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/Sample.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/SampleInfo.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/SampleRef.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/SharedSamples.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/Subscriber.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/SubscriberListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TAnyDataReader.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TCoherentAccess.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TDataReader.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TGenerationCount.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TQuery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TRank.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TSample.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TSampleInfo.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TSampleRef.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/TSubscriber.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/QueryCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/ReadCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/TQueryCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/TReadCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/detail/QueryCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/detail/ReadCondition.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/detail/TQueryConditionImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/cond/detail/TReadConditionImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/ddssub.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/AnyDataReader.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/CoherentAccess.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/DataReader.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/GenerationCount.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamples.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamplesImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/Manipulators.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/Query.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/Rank.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/Sample.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/SampleInfo.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/SampleRef.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/SamplesHolder.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/SharedSamples.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/SharedSamplesImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/Subscriber.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TAnyDataReaderImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TCoherentAccessImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TDataReaderImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TGenerationCountImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TQueryImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TRankImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TSampleImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TSampleInfoImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TSampleRefImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/TSubscriberImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/ddssub.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/detail/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/qos/DataReaderQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/qos/SubscriberQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/qos/detail/DataReaderQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/qos/detail/SubscriberQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/status/DataState.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/sub/status/detail/DataStateImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/AnyTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/AnyTopicListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/BuiltinTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/BuiltinTopicKey.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/ContentFilteredTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/Filter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/MultiTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TAnyTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TBuiltinTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TBuiltinTopicKey.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TContentFilteredTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TFilter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TMultiTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TTopicDescription.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/Topic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TopicDescription.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TopicInstance.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TopicListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/TopicTraits.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/ddstopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/AnyTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopicKey.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/ContentFilteredTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/Filter.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/MultiTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TAnyTopicImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicKeyImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TContentFilteredTopicImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TFilterImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TTopicDescriptionImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TTopicImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/Topic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TopicDescription.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/TopicInstanceImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/ddstopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/detail/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/qos/TopicQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/dds/topic/qos/detail/TopicQos.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/ForwardDeclarations.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/DDScObjectDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityRegistry.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntitySet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/InstanceHandleDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ListenerDispatcher.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/MiscUtils.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Missing.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Mutex.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/QosProviderDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ReportUtils.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ScopedLock.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/TimeHelper.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/WeakReferenceSet.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/basic_cdr_ser.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_enums.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_stream.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/entity_properties.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v1_ser.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v2_ser.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/fragchain.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ConditionDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/FunctorHolder.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/GuardConditionDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ShadowParticipant.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/StatusConditionDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/WaitSetDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/config.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/Policy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/PolicyDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/ProprietaryPolicyKind.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/QosPolicyCountDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/TPolicy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/status/StatusDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/type_helpers.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/Domain.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantRegistry.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainWrap.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/qos/DomainParticipantQosDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/AnyDataWriterDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/CoherentSetDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/PublisherDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/SuspendedPublicationDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/DataWriterQosDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/PublisherQosDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/AnyDataReaderDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/BuiltinSubscriberDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/CoherentAccessDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/GenerationCountImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/QueryDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/RankImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SampleInfoImpl.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SubscriberDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/QueryConditionDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/ReadConditionDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/DataReaderQosDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/SubscriberQosDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicCopy.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicKeyDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicTraits.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/CDRBlob.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/FilterDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TBuiltinTopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicDescriptionDelegate.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicListener.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicTraits.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/datatopic.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/discovery.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/find.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/hash.hpp (100%) rename {cpp_bridge => deploy/dds_bridge}/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/qos/TopicQosDelegate.hpp (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/CMakeLists.txt (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/README.md (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/Version.h.in (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/config/config.yaml (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/launch/dashing_start.py (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/launch/start.launch (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/launch/start.py (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/msg/UdpFrame.msg (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/msg/UdpPacket.msg (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/msg/msg_ros2/UdpFrame.msg (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/msg/msg_ros2/UdpPacket.msg (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/node/hesai_ros_driver_node.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/node/hesai_ros_driver_node.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/package.xml (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/rviz/rviz.rviz (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/rviz/rviz2.rviz (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/CMakeLists.txt (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/LICENSE (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/README.md (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/Version.h.in (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/change notes.md (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/AT128E2X_Angle Correction File.dat (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/FT120C1X_Angle Correction File.dat (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/OT128_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar128E3X_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40M_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40P_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar64_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar90E3X_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarQT_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT-16_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Channel_Cofig.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/XT32M2X_Angle Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/AT128E2X_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar128E3X_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40E3X_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40P_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64E3X_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar90_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT-16_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/QT128C2X_Firetime Correction File.csv (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk.hpp (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk_gpu.cuh (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/CMakeLists.txt (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/blocking_ring.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2d_shared.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2dex.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/blocking_ring.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2d_shared.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2dex.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar_types.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/include/logger.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/src/logger.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/client_base.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/lidar_communication_header.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/ptc_client.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_client.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_ssl_client.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/ptc_client.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_client.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_ssl_client.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/general_ptc_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_1_0_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_2_0_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/general_ptc_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_1_0_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_2_0_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_saver.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_source.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/socket_source.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/source.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_saver.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_source.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/socket_source.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/source.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/general_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp1_4_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_4_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_5_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_1_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_2_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp4_3_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp6_1_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp7_2_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p40_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p64_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/general_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp1_4_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_4_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_5_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_1_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_2_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp4_3_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp6_1_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp7_2_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p40_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p64_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/general_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/nvbuffer.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/return_code.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/safe_call.cuh (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp1_4_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp2_5_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_1_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_2_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp4_3_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp6_1_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp7_2_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p40_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p64_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/buffer.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/general_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp1_4_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp2_5_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_1_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_2_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp4_3_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp6_1_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp7_2_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p40_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p64_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/fault_message.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_header.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p40.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p64.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v1_4.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_4.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_5.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_1.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_2.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v4_3.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v6_1.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v7_2.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/driver_param.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/auto_tick_count.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/plat_utils.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/auto_tick_count.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/plat_utils.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/CMakeLists.txt (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/Version.h.in (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/packet_loss_tool.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/manager/node_manager.cc (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/manager/node_manager.cu (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/manager/node_manager.h (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/manager/source_driver_ros1.hpp (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/manager/source_driver_ros2.hpp (100%) rename deploy/{ros2_ws => perception_ws}/src/lidar_node/src/utility/yaml_reader.hpp (100%) create mode 100644 deploy/robot_ws/install/.colcon_install_layout create mode 100644 deploy/robot_ws/install/COLCON_IGNORE create mode 100644 deploy/robot_ws/install/_local_setup_util_ps1.py create mode 100644 deploy/robot_ws/install/_local_setup_util_sh.py create mode 100755 deploy/robot_ws/install/go2py_node/lib/go2py_node/bridge create mode 100644 deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/package_run_dependencies/go2py_node create mode 100644 deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/packages/go2py_node create mode 100644 deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/parent_prefix_path/go2py_node create mode 100644 deploy/robot_ws/install/go2py_node/share/colcon-core/packages/go2py_node create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig-version.cmake create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig.cmake create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.dsv create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.sh create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.dsv create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.sh create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.dsv create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.ps1 create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.sh create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.bash create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.dsv create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.sh create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.zsh create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/package.bash create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/package.dsv create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/package.ps1 create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/package.sh create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/package.xml create mode 100644 deploy/robot_ws/install/go2py_node/share/go2py_node/package.zsh create mode 100644 deploy/robot_ws/install/local_setup.bash create mode 100644 deploy/robot_ws/install/local_setup.ps1 create mode 100644 deploy/robot_ws/install/local_setup.sh create mode 100644 deploy/robot_ws/install/local_setup.zsh create mode 100644 deploy/robot_ws/install/setup.bash create mode 100644 deploy/robot_ws/install/setup.ps1 create mode 100644 deploy/robot_ws/install/setup.sh create mode 100644 deploy/robot_ws/install/setup.zsh create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.c create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_c__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/__init__.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/__init__.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_s.c create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status.py create mode 100644 deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status_s.c create mode 100644 deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/package_run_dependencies/unitree_api create mode 100644 deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/packages/unitree_api create mode 100644 deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/parent_prefix_path/unitree_api create mode 100644 deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/rosidl_interfaces/unitree_api create mode 100644 deploy/robot_ws/install/unitree_api/share/colcon-core/packages/unitree_api create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_dependencies-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_include_directories-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_libraries-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_targets-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig-version.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cppExport.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport.cmake create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.ps1 create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.ps1 create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.ps1 create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.bash create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.zsh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.msg create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestHeader_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestIdentity_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestLease_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestPolicy_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Request_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseHeader_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseStatus_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Response_.idl create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/package.bash create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/package.dsv create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/package.ps1 create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/package.sh create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/package.xml create mode 100644 deploy/robot_ws/install/unitree_api/share/unitree_api/package.zsh create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__builder.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_c.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_cpp.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__traits.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.c create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.cpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_c__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.hpp create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.h create mode 100644 deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.hpp create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/__init__.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/__init__.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch_s.c create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller.py create mode 100644 deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller_s.c create mode 100644 deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/package_run_dependencies/unitree_go create mode 100644 deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/packages/unitree_go create mode 100644 deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/parent_prefix_path/unitree_go create mode 100644 deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/rosidl_interfaces/unitree_go create mode 100644 deploy/robot_ws/install/unitree_go/share/colcon-core/packages/unitree_go create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_dependencies-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_include_directories-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_libraries-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_targets-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig-version.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cppExport.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport-noconfig.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport.cmake create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.ps1 create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.ps1 create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.ps1 create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.bash create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.zsh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.msg create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/AudioData_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsCmd_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Error_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Go2FrontVideoData_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/HeightMap_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/IMUState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/InterfaceConfig_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LidarState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowCmd_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorCmd_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/PathPoint_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Req_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Res_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeCmd_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/TimeSpec_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbState_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbSwitch_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/WirelessController_.idl create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/package.bash create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/package.dsv create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/package.ps1 create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/package.sh create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/package.xml create mode 100644 deploy/robot_ws/install/unitree_go/share/unitree_go/package.zsh create mode 100644 deploy/robot_ws/log/COLCON_IGNORE create mode 120000 deploy/robot_ws/log/latest create mode 120000 deploy/robot_ws/log/latest_build create mode 100644 deploy/robot_ws/src/go2py_node/CMakeLists.txt create mode 100644 deploy/robot_ws/src/go2py_node/include/common/motor_crc.h create mode 100644 deploy/robot_ws/src/go2py_node/include/common/ros2_sport_client.h create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/adl_serializer.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/byte_container_with_subtype.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/abi_macros.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/from_json.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_chars.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_json.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/exceptions.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/hash.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/binary_reader.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/input_adapters.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/json_sax.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/lexer.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/parser.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/position_t.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/internal_iterator.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iter_impl.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iteration_proxy.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iterator_traits.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/json_reverse_iterator.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/primitive_iterator.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_custom_base_class.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_pointer.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_ref.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_scope.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_unscope.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/begin.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/end.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/cpp_future.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/detected.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/identity_tag.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/is_sax.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/std_fs.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/type_traits.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/void_t.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/output/binary_writer.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/output/output_adapters.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/output/serializer.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/string_concat.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/string_escape.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/detail/value_t.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/json.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/json_fwd.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/ordered_map.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/thirdparty/hedley/hedley.hpp create mode 100644 deploy/robot_ws/src/go2py_node/include/nlohmann/thirdparty/hedley/hedley_undef.hpp create mode 100644 deploy/robot_ws/src/go2py_node/package.xml create mode 100644 deploy/robot_ws/src/go2py_node/src/bridge.cpp create mode 100644 deploy/robot_ws/src/go2py_node/src/common/motor_crc.cpp create mode 100644 deploy/robot_ws/src/go2py_node/src/common/ros2_sport_client.cpp create mode 100755 deploy/robot_ws/src/unitree/unitree_api/CMakeLists.txt create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/Request.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/RequestHeader.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/RequestIdentity.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/RequestLease.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/RequestPolicy.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/Response.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/ResponseHeader.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/msg/ResponseStatus.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_api/package.xml create mode 100755 deploy/robot_ws/src/unitree/unitree_go/CMakeLists.txt create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/AudioData.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/BmsCmd.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/BmsState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/Error.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/Go2FrontVideoData.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/HeightMap.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/IMUState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/InterfaceConfig.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/LidarState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/LowCmd.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/LowState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/MotorCmd.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/MotorState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/PathPoint.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/Req.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/Res.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/SportModeCmd.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/SportModeState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/TimeSpec.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/UwbState.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/UwbSwitch.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/msg/WirelessController.msg create mode 100755 deploy/robot_ws/src/unitree/unitree_go/package.xml diff --git a/cpp_bridge/CMakeLists.txt b/deploy/dds_bridge/CMakeLists.txt similarity index 100% rename from cpp_bridge/CMakeLists.txt rename to deploy/dds_bridge/CMakeLists.txt diff --git a/cpp_bridge/include/go2py/Imu.cpp b/deploy/dds_bridge/include/go2py/Imu.cpp similarity index 100% rename from cpp_bridge/include/go2py/Imu.cpp rename to deploy/dds_bridge/include/go2py/Imu.cpp diff --git a/cpp_bridge/include/go2py/Imu.hpp b/deploy/dds_bridge/include/go2py/Imu.hpp similarity index 100% rename from cpp_bridge/include/go2py/Imu.hpp rename to deploy/dds_bridge/include/go2py/Imu.hpp diff --git a/cpp_bridge/include/go2py/LowCmd.cpp b/deploy/dds_bridge/include/go2py/LowCmd.cpp similarity index 100% rename from cpp_bridge/include/go2py/LowCmd.cpp rename to deploy/dds_bridge/include/go2py/LowCmd.cpp diff --git a/cpp_bridge/include/go2py/LowCmd.hpp b/deploy/dds_bridge/include/go2py/LowCmd.hpp similarity index 100% rename from cpp_bridge/include/go2py/LowCmd.hpp rename to deploy/dds_bridge/include/go2py/LowCmd.hpp diff --git a/cpp_bridge/include/go2py/LowState.cpp b/deploy/dds_bridge/include/go2py/LowState.cpp similarity index 100% rename from cpp_bridge/include/go2py/LowState.cpp rename to deploy/dds_bridge/include/go2py/LowState.cpp diff --git a/cpp_bridge/include/go2py/LowState.hpp b/deploy/dds_bridge/include/go2py/LowState.hpp similarity index 100% rename from cpp_bridge/include/go2py/LowState.hpp rename to deploy/dds_bridge/include/go2py/LowState.hpp diff --git a/cpp_bridge/include/unitree/common/any.hpp b/deploy/dds_bridge/include/unitree/common/any.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/any.hpp rename to deploy/dds_bridge/include/unitree/common/any.hpp diff --git a/cpp_bridge/include/unitree/common/assert.hpp b/deploy/dds_bridge/include/unitree/common/assert.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/assert.hpp rename to deploy/dds_bridge/include/unitree/common/assert.hpp diff --git a/cpp_bridge/include/unitree/common/block_queue.hpp b/deploy/dds_bridge/include/unitree/common/block_queue.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/block_queue.hpp rename to deploy/dds_bridge/include/unitree/common/block_queue.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_callback.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_callback.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_callback.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_callback.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_easy_model.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_easy_model.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_easy_model.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_easy_model.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_entity.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_entity.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_entity.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_entity.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_error.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_error.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_error.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_exception.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_exception.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_exception.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_exception.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_factory_model.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_factory_model.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_factory_model.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_factory_model.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_native.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_native.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_native.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_native.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_parameter.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_parameter.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_parameter.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_parameter.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_qos.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_qos.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_qos.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_qos.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_qos_parameter.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_qos_parameter.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_qos_parameter.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_qos_parameter.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_qos_policy.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_qos_policy.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_qos_policy.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_qos_policy.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_qos_policy_parameter.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_qos_policy_parameter.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_qos_policy_parameter.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_qos_policy_parameter.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_qos_realize.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_qos_realize.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_qos_realize.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_qos_realize.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_topic_channel.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_topic_channel.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_topic_channel.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_topic_channel.hpp diff --git a/cpp_bridge/include/unitree/common/dds/dds_traits.hpp b/deploy/dds_bridge/include/unitree/common/dds/dds_traits.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/dds/dds_traits.hpp rename to deploy/dds_bridge/include/unitree/common/dds/dds_traits.hpp diff --git a/cpp_bridge/include/unitree/common/decl.hpp b/deploy/dds_bridge/include/unitree/common/decl.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/decl.hpp rename to deploy/dds_bridge/include/unitree/common/decl.hpp diff --git a/cpp_bridge/include/unitree/common/error.hpp b/deploy/dds_bridge/include/unitree/common/error.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/error.hpp rename to deploy/dds_bridge/include/unitree/common/error.hpp diff --git a/cpp_bridge/include/unitree/common/exception.hpp b/deploy/dds_bridge/include/unitree/common/exception.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/exception.hpp rename to deploy/dds_bridge/include/unitree/common/exception.hpp diff --git a/cpp_bridge/include/unitree/common/filesystem/directory.hpp b/deploy/dds_bridge/include/unitree/common/filesystem/directory.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/filesystem/directory.hpp rename to deploy/dds_bridge/include/unitree/common/filesystem/directory.hpp diff --git a/cpp_bridge/include/unitree/common/filesystem/file.hpp b/deploy/dds_bridge/include/unitree/common/filesystem/file.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/filesystem/file.hpp rename to deploy/dds_bridge/include/unitree/common/filesystem/file.hpp diff --git a/cpp_bridge/include/unitree/common/filesystem/filesystem.hpp b/deploy/dds_bridge/include/unitree/common/filesystem/filesystem.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/filesystem/filesystem.hpp rename to deploy/dds_bridge/include/unitree/common/filesystem/filesystem.hpp diff --git a/cpp_bridge/include/unitree/common/json/json.hpp b/deploy/dds_bridge/include/unitree/common/json/json.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/json/json.hpp rename to deploy/dds_bridge/include/unitree/common/json/json.hpp diff --git a/cpp_bridge/include/unitree/common/json/json_config.hpp b/deploy/dds_bridge/include/unitree/common/json/json_config.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/json/json_config.hpp rename to deploy/dds_bridge/include/unitree/common/json/json_config.hpp diff --git a/cpp_bridge/include/unitree/common/json/jsonize.hpp b/deploy/dds_bridge/include/unitree/common/json/jsonize.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/json/jsonize.hpp rename to deploy/dds_bridge/include/unitree/common/json/jsonize.hpp diff --git a/cpp_bridge/include/unitree/common/lock/lock.hpp b/deploy/dds_bridge/include/unitree/common/lock/lock.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/lock/lock.hpp rename to deploy/dds_bridge/include/unitree/common/lock/lock.hpp diff --git a/cpp_bridge/include/unitree/common/log/log.hpp b/deploy/dds_bridge/include/unitree/common/log/log.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log.hpp rename to deploy/dds_bridge/include/unitree/common/log/log.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_buffer.hpp b/deploy/dds_bridge/include/unitree/common/log/log_buffer.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_buffer.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_buffer.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_decl.hpp b/deploy/dds_bridge/include/unitree/common/log/log_decl.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_decl.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_decl.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_initor.hpp b/deploy/dds_bridge/include/unitree/common/log/log_initor.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_initor.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_initor.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_keeper.hpp b/deploy/dds_bridge/include/unitree/common/log/log_keeper.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_keeper.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_keeper.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_logger.hpp b/deploy/dds_bridge/include/unitree/common/log/log_logger.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_logger.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_logger.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_policy.hpp b/deploy/dds_bridge/include/unitree/common/log/log_policy.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_policy.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_policy.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_store.hpp b/deploy/dds_bridge/include/unitree/common/log/log_store.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_store.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_store.hpp diff --git a/cpp_bridge/include/unitree/common/log/log_writer.hpp b/deploy/dds_bridge/include/unitree/common/log/log_writer.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/log/log_writer.hpp rename to deploy/dds_bridge/include/unitree/common/log/log_writer.hpp diff --git a/cpp_bridge/include/unitree/common/os.hpp b/deploy/dds_bridge/include/unitree/common/os.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/os.hpp rename to deploy/dds_bridge/include/unitree/common/os.hpp diff --git a/cpp_bridge/include/unitree/common/service/base/service_application.hpp b/deploy/dds_bridge/include/unitree/common/service/base/service_application.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/service/base/service_application.hpp rename to deploy/dds_bridge/include/unitree/common/service/base/service_application.hpp diff --git a/cpp_bridge/include/unitree/common/service/base/service_base.hpp b/deploy/dds_bridge/include/unitree/common/service/base/service_base.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/service/base/service_base.hpp rename to deploy/dds_bridge/include/unitree/common/service/base/service_base.hpp diff --git a/cpp_bridge/include/unitree/common/service/base/service_config.hpp b/deploy/dds_bridge/include/unitree/common/service/base/service_config.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/service/base/service_config.hpp rename to deploy/dds_bridge/include/unitree/common/service/base/service_config.hpp diff --git a/cpp_bridge/include/unitree/common/service/base/service_decl.hpp b/deploy/dds_bridge/include/unitree/common/service/base/service_decl.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/service/base/service_decl.hpp rename to deploy/dds_bridge/include/unitree/common/service/base/service_decl.hpp diff --git a/cpp_bridge/include/unitree/common/service/dds_service.hpp b/deploy/dds_bridge/include/unitree/common/service/dds_service.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/service/dds_service.hpp rename to deploy/dds_bridge/include/unitree/common/service/dds_service.hpp diff --git a/cpp_bridge/include/unitree/common/socket/domain_socket.hpp b/deploy/dds_bridge/include/unitree/common/socket/domain_socket.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/socket/domain_socket.hpp rename to deploy/dds_bridge/include/unitree/common/socket/domain_socket.hpp diff --git a/cpp_bridge/include/unitree/common/socket/socket.hpp b/deploy/dds_bridge/include/unitree/common/socket/socket.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/socket/socket.hpp rename to deploy/dds_bridge/include/unitree/common/socket/socket.hpp diff --git a/cpp_bridge/include/unitree/common/string_tool.hpp b/deploy/dds_bridge/include/unitree/common/string_tool.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/string_tool.hpp rename to deploy/dds_bridge/include/unitree/common/string_tool.hpp diff --git a/cpp_bridge/include/unitree/common/thread/future.hpp b/deploy/dds_bridge/include/unitree/common/thread/future.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/thread/future.hpp rename to deploy/dds_bridge/include/unitree/common/thread/future.hpp diff --git a/cpp_bridge/include/unitree/common/thread/recurrent_thread.hpp b/deploy/dds_bridge/include/unitree/common/thread/recurrent_thread.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/thread/recurrent_thread.hpp rename to deploy/dds_bridge/include/unitree/common/thread/recurrent_thread.hpp diff --git a/cpp_bridge/include/unitree/common/thread/thread.hpp b/deploy/dds_bridge/include/unitree/common/thread/thread.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/thread/thread.hpp rename to deploy/dds_bridge/include/unitree/common/thread/thread.hpp diff --git a/cpp_bridge/include/unitree/common/thread/thread_decl.hpp b/deploy/dds_bridge/include/unitree/common/thread/thread_decl.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/thread/thread_decl.hpp rename to deploy/dds_bridge/include/unitree/common/thread/thread_decl.hpp diff --git a/cpp_bridge/include/unitree/common/thread/thread_pool.hpp b/deploy/dds_bridge/include/unitree/common/thread/thread_pool.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/thread/thread_pool.hpp rename to deploy/dds_bridge/include/unitree/common/thread/thread_pool.hpp diff --git a/cpp_bridge/include/unitree/common/thread/thread_task.hpp b/deploy/dds_bridge/include/unitree/common/thread/thread_task.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/thread/thread_task.hpp rename to deploy/dds_bridge/include/unitree/common/thread/thread_task.hpp diff --git a/cpp_bridge/include/unitree/common/time/sleep.hpp b/deploy/dds_bridge/include/unitree/common/time/sleep.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/time/sleep.hpp rename to deploy/dds_bridge/include/unitree/common/time/sleep.hpp diff --git a/cpp_bridge/include/unitree/common/time/time_tool.hpp b/deploy/dds_bridge/include/unitree/common/time/time_tool.hpp similarity index 100% rename from cpp_bridge/include/unitree/common/time/time_tool.hpp rename to deploy/dds_bridge/include/unitree/common/time/time_tool.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/AudioData_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/AudioData_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/AudioData_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/AudioData_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/BmsCmd_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/BmsCmd_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/BmsCmd_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/BmsCmd_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/BmsState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/BmsState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/BmsState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/BmsState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/ConfigChangeStatus_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/ConfigChangeStatus_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/ConfigChangeStatus_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/ConfigChangeStatus_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/Error_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/Error_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/Error_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/Error_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/Go2FrontVideoData_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/Go2FrontVideoData_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/Go2FrontVideoData_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/Go2FrontVideoData_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/HeightMap_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/HeightMap_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/HeightMap_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/HeightMap_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/IMUState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/IMUState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/IMUState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/IMUState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/InterfaceConfig_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/InterfaceConfig_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/InterfaceConfig_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/InterfaceConfig_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/LidarState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/LidarState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/LidarState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/LidarState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/LowCmd_.cpp b/deploy/dds_bridge/include/unitree/idl/go2/LowCmd_.cpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/LowCmd_.cpp rename to deploy/dds_bridge/include/unitree/idl/go2/LowCmd_.cpp diff --git a/cpp_bridge/include/unitree/idl/go2/LowCmd_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/LowCmd_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/LowCmd_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/LowCmd_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/LowState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/LowState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/LowState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/LowState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/MotorCmd_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/MotorCmd_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/MotorCmd_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/MotorCmd_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/MotorState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/MotorState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/MotorState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/MotorState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/PathPoint_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/PathPoint_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/PathPoint_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/PathPoint_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/Req_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/Req_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/Req_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/Req_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/Res_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/Res_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/Res_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/Res_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/SportModeCmd_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/SportModeCmd_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/SportModeCmd_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/SportModeCmd_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/SportModeState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/SportModeState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/SportModeState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/SportModeState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/TimeSpec_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/TimeSpec_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/TimeSpec_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/TimeSpec_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/UwbState_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/UwbState_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/UwbState_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/UwbState_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/UwbSwitch_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/UwbSwitch_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/UwbSwitch_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/UwbSwitch_.hpp diff --git a/cpp_bridge/include/unitree/idl/go2/WirelessController_.hpp b/deploy/dds_bridge/include/unitree/idl/go2/WirelessController_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/go2/WirelessController_.hpp rename to deploy/dds_bridge/include/unitree/idl/go2/WirelessController_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Header_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Header_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Header_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Header_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/MapMetaData_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/MapMetaData_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/MapMetaData_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/MapMetaData_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/OccupancyGrid_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/OccupancyGrid_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/OccupancyGrid_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/OccupancyGrid_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Odometry_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Odometry_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Odometry_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Odometry_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Point32_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Point32_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Point32_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Point32_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/PointCloud2_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/PointCloud2_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/PointCloud2_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/PointCloud2_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/PointField_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/PointField_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/PointField_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/PointField_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/PointStamped_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/PointStamped_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/PointStamped_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/PointStamped_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Point_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Point_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Point_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Point_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Pose2D_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Pose2D_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Pose2D_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Pose2D_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/PoseStamped_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/PoseStamped_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/PoseStamped_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/PoseStamped_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/PoseWithCovarianceStamped_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/PoseWithCovarianceStamped_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/PoseWithCovarianceStamped_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/PoseWithCovarianceStamped_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/PoseWithCovariance_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/PoseWithCovariance_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/PoseWithCovariance_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/PoseWithCovariance_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Pose_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Pose_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Pose_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Pose_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/QuaternionStamped_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/QuaternionStamped_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/QuaternionStamped_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/QuaternionStamped_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Quaternion_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Quaternion_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Quaternion_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Quaternion_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/String_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/String_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/String_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/String_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Time_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Time_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Time_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Time_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/TwistStamped_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/TwistStamped_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/TwistStamped_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/TwistStamped_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/TwistWithCovarianceStamped_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/TwistWithCovarianceStamped_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/TwistWithCovarianceStamped_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/TwistWithCovarianceStamped_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/TwistWithCovariance_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/TwistWithCovariance_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/TwistWithCovariance_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/TwistWithCovariance_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Twist_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Twist_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Twist_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Twist_.hpp diff --git a/cpp_bridge/include/unitree/idl/ros2/Vector3_.hpp b/deploy/dds_bridge/include/unitree/idl/ros2/Vector3_.hpp similarity index 100% rename from cpp_bridge/include/unitree/idl/ros2/Vector3_.hpp rename to deploy/dds_bridge/include/unitree/idl/ros2/Vector3_.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/back_video/back_video_api.hpp b/deploy/dds_bridge/include/unitree/robot/b2/back_video/back_video_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/back_video/back_video_api.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/back_video/back_video_api.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/back_video/back_video_client.hpp b/deploy/dds_bridge/include/unitree/robot/b2/back_video/back_video_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/back_video/back_video_client.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/back_video/back_video_client.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/back_video/back_video_error.hpp b/deploy/dds_bridge/include/unitree/robot/b2/back_video/back_video_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/back_video/back_video_error.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/back_video/back_video_error.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/config/config_api.hpp b/deploy/dds_bridge/include/unitree/robot/b2/config/config_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/config/config_api.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/config/config_api.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/config/config_client.hpp b/deploy/dds_bridge/include/unitree/robot/b2/config/config_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/config/config_client.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/config/config_client.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/config/config_error.hpp b/deploy/dds_bridge/include/unitree/robot/b2/config/config_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/config/config_error.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/config/config_error.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/front_video/front_video_api.hpp b/deploy/dds_bridge/include/unitree/robot/b2/front_video/front_video_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/front_video/front_video_api.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/front_video/front_video_api.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/front_video/front_video_client.hpp b/deploy/dds_bridge/include/unitree/robot/b2/front_video/front_video_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/front_video/front_video_client.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/front_video/front_video_client.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/front_video/front_video_error.hpp b/deploy/dds_bridge/include/unitree/robot/b2/front_video/front_video_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/front_video/front_video_error.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/front_video/front_video_error.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_api.hpp b/deploy/dds_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_api.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_api.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_client.hpp b/deploy/dds_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_client.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_client.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_error.hpp b/deploy/dds_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_error.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/motion_switcher/motion_switcher_error.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/robot_state/robot_state_api.hpp b/deploy/dds_bridge/include/unitree/robot/b2/robot_state/robot_state_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/robot_state/robot_state_api.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/robot_state/robot_state_api.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/robot_state/robot_state_client.hpp b/deploy/dds_bridge/include/unitree/robot/b2/robot_state/robot_state_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/robot_state/robot_state_client.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/robot_state/robot_state_client.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/robot_state/robot_state_error.hpp b/deploy/dds_bridge/include/unitree/robot/b2/robot_state/robot_state_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/robot_state/robot_state_error.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/robot_state/robot_state_error.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/sport/sport_api.hpp b/deploy/dds_bridge/include/unitree/robot/b2/sport/sport_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/sport/sport_api.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/sport/sport_api.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/sport/sport_client.hpp b/deploy/dds_bridge/include/unitree/robot/b2/sport/sport_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/sport/sport_client.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/sport/sport_client.hpp diff --git a/cpp_bridge/include/unitree/robot/b2/sport/sport_error.hpp b/deploy/dds_bridge/include/unitree/robot/b2/sport/sport_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/b2/sport/sport_error.hpp rename to deploy/dds_bridge/include/unitree/robot/b2/sport/sport_error.hpp diff --git a/cpp_bridge/include/unitree/robot/channel/channel_factory.hpp b/deploy/dds_bridge/include/unitree/robot/channel/channel_factory.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/channel/channel_factory.hpp rename to deploy/dds_bridge/include/unitree/robot/channel/channel_factory.hpp diff --git a/cpp_bridge/include/unitree/robot/channel/channel_labor.hpp b/deploy/dds_bridge/include/unitree/robot/channel/channel_labor.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/channel/channel_labor.hpp rename to deploy/dds_bridge/include/unitree/robot/channel/channel_labor.hpp diff --git a/cpp_bridge/include/unitree/robot/channel/channel_namer.hpp b/deploy/dds_bridge/include/unitree/robot/channel/channel_namer.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/channel/channel_namer.hpp rename to deploy/dds_bridge/include/unitree/robot/channel/channel_namer.hpp diff --git a/cpp_bridge/include/unitree/robot/channel/channel_publisher.hpp b/deploy/dds_bridge/include/unitree/robot/channel/channel_publisher.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/channel/channel_publisher.hpp rename to deploy/dds_bridge/include/unitree/robot/channel/channel_publisher.hpp diff --git a/cpp_bridge/include/unitree/robot/channel/channel_subscriber.hpp b/deploy/dds_bridge/include/unitree/robot/channel/channel_subscriber.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/channel/channel_subscriber.hpp rename to deploy/dds_bridge/include/unitree/robot/channel/channel_subscriber.hpp diff --git a/cpp_bridge/include/unitree/robot/client/client.hpp b/deploy/dds_bridge/include/unitree/robot/client/client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/client/client.hpp rename to deploy/dds_bridge/include/unitree/robot/client/client.hpp diff --git a/cpp_bridge/include/unitree/robot/client/client_base.hpp b/deploy/dds_bridge/include/unitree/robot/client/client_base.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/client/client_base.hpp rename to deploy/dds_bridge/include/unitree/robot/client/client_base.hpp diff --git a/cpp_bridge/include/unitree/robot/client/client_stub.hpp b/deploy/dds_bridge/include/unitree/robot/client/client_stub.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/client/client_stub.hpp rename to deploy/dds_bridge/include/unitree/robot/client/client_stub.hpp diff --git a/cpp_bridge/include/unitree/robot/client/lease_client.hpp b/deploy/dds_bridge/include/unitree/robot/client/lease_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/client/lease_client.hpp rename to deploy/dds_bridge/include/unitree/robot/client/lease_client.hpp diff --git a/cpp_bridge/include/unitree/robot/future/request_future.hpp b/deploy/dds_bridge/include/unitree/robot/future/request_future.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/future/request_future.hpp rename to deploy/dds_bridge/include/unitree/robot/future/request_future.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_api.hpp b/deploy/dds_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_api.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_api.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_client.hpp b/deploy/dds_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_client.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/obstacles_avoid/obstacles_avoid_client.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/public/jsonize_type.hpp b/deploy/dds_bridge/include/unitree/robot/go2/public/jsonize_type.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/public/jsonize_type.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/public/jsonize_type.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/robot_state/robot_state_api.hpp b/deploy/dds_bridge/include/unitree/robot/go2/robot_state/robot_state_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/robot_state/robot_state_api.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/robot_state/robot_state_api.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/robot_state/robot_state_client.hpp b/deploy/dds_bridge/include/unitree/robot/go2/robot_state/robot_state_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/robot_state/robot_state_client.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/robot_state/robot_state_client.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/robot_state/robot_state_error.hpp b/deploy/dds_bridge/include/unitree/robot/go2/robot_state/robot_state_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/robot_state/robot_state_error.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/robot_state/robot_state_error.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/sport/sport_api.hpp b/deploy/dds_bridge/include/unitree/robot/go2/sport/sport_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/sport/sport_api.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/sport/sport_api.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/sport/sport_client.hpp b/deploy/dds_bridge/include/unitree/robot/go2/sport/sport_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/sport/sport_client.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/sport/sport_client.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/sport/sport_error.hpp b/deploy/dds_bridge/include/unitree/robot/go2/sport/sport_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/sport/sport_error.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/sport/sport_error.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/utrack/utrack_api.hpp b/deploy/dds_bridge/include/unitree/robot/go2/utrack/utrack_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/utrack/utrack_api.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/utrack/utrack_api.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/utrack/utrack_client.hpp b/deploy/dds_bridge/include/unitree/robot/go2/utrack/utrack_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/utrack/utrack_client.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/utrack/utrack_client.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/video/video_api.hpp b/deploy/dds_bridge/include/unitree/robot/go2/video/video_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/video/video_api.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/video/video_api.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/video/video_client.hpp b/deploy/dds_bridge/include/unitree/robot/go2/video/video_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/video/video_client.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/video/video_client.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/video/video_error.hpp b/deploy/dds_bridge/include/unitree/robot/go2/video/video_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/video/video_error.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/video/video_error.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/vui/vui_api.hpp b/deploy/dds_bridge/include/unitree/robot/go2/vui/vui_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/vui/vui_api.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/vui/vui_api.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/vui/vui_client.hpp b/deploy/dds_bridge/include/unitree/robot/go2/vui/vui_client.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/vui/vui_client.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/vui/vui_client.hpp diff --git a/cpp_bridge/include/unitree/robot/go2/vui/vui_error.hpp b/deploy/dds_bridge/include/unitree/robot/go2/vui/vui_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/go2/vui/vui_error.hpp rename to deploy/dds_bridge/include/unitree/robot/go2/vui/vui_error.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_api.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_api.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_api.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_api.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_error.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_error.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_error.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_error.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestHeader_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestHeader_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestHeader_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestHeader_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestIdentity_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestIdentity_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestIdentity_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestIdentity_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestLease_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestLease_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestLease_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestLease_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestPolicy_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestPolicy_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/RequestPolicy_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/RequestPolicy_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/Request_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/Request_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/Request_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/Request_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseHeader_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseHeader_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseHeader_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseHeader_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseStatus_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseStatus_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseStatus_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/ResponseStatus_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_idl_decl/Response_.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/Response_.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_idl_decl/Response_.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_idl_decl/Response_.hpp diff --git a/cpp_bridge/include/unitree/robot/internal/internal_request_response.hpp b/deploy/dds_bridge/include/unitree/robot/internal/internal_request_response.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/internal/internal_request_response.hpp rename to deploy/dds_bridge/include/unitree/robot/internal/internal_request_response.hpp diff --git a/cpp_bridge/include/unitree/robot/serialize/serialize.hpp b/deploy/dds_bridge/include/unitree/robot/serialize/serialize.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/serialize/serialize.hpp rename to deploy/dds_bridge/include/unitree/robot/serialize/serialize.hpp diff --git a/cpp_bridge/include/unitree/robot/server/lease_server.hpp b/deploy/dds_bridge/include/unitree/robot/server/lease_server.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/server/lease_server.hpp rename to deploy/dds_bridge/include/unitree/robot/server/lease_server.hpp diff --git a/cpp_bridge/include/unitree/robot/server/server.hpp b/deploy/dds_bridge/include/unitree/robot/server/server.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/server/server.hpp rename to deploy/dds_bridge/include/unitree/robot/server/server.hpp diff --git a/cpp_bridge/include/unitree/robot/server/server_base.hpp b/deploy/dds_bridge/include/unitree/robot/server/server_base.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/server/server_base.hpp rename to deploy/dds_bridge/include/unitree/robot/server/server_base.hpp diff --git a/cpp_bridge/include/unitree/robot/server/server_stub.hpp b/deploy/dds_bridge/include/unitree/robot/server/server_stub.hpp similarity index 100% rename from cpp_bridge/include/unitree/robot/server/server_stub.hpp rename to deploy/dds_bridge/include/unitree/robot/server/server_stub.hpp diff --git a/cpp_bridge/include/utils/dds_publisher.hpp b/deploy/dds_bridge/include/utils/dds_publisher.hpp similarity index 100% rename from cpp_bridge/include/utils/dds_publisher.hpp rename to deploy/dds_bridge/include/utils/dds_publisher.hpp diff --git a/cpp_bridge/include/utils/dds_subscriber.hpp b/deploy/dds_bridge/include/utils/dds_subscriber.hpp similarity index 100% rename from cpp_bridge/include/utils/dds_subscriber.hpp rename to deploy/dds_bridge/include/utils/dds_subscriber.hpp diff --git a/cpp_bridge/install.sh b/deploy/dds_bridge/install.sh similarity index 100% rename from cpp_bridge/install.sh rename to deploy/dds_bridge/install.sh diff --git a/cpp_bridge/lib/aarch64/libunitree_sdk2.a b/deploy/dds_bridge/lib/aarch64/libunitree_sdk2.a similarity index 100% rename from cpp_bridge/lib/aarch64/libunitree_sdk2.a rename to deploy/dds_bridge/lib/aarch64/libunitree_sdk2.a diff --git a/cpp_bridge/lib/x86_64/libunitree_sdk2.a b/deploy/dds_bridge/lib/x86_64/libunitree_sdk2.a similarity index 100% rename from cpp_bridge/lib/x86_64/libunitree_sdk2.a rename to deploy/dds_bridge/lib/x86_64/libunitree_sdk2.a diff --git a/cpp_bridge/src/high_level/follow_sin.cpp b/deploy/dds_bridge/src/high_level/follow_sin.cpp similarity index 100% rename from cpp_bridge/src/high_level/follow_sin.cpp rename to deploy/dds_bridge/src/high_level/follow_sin.cpp diff --git a/cpp_bridge/src/high_level/sportmode_test.cpp b/deploy/dds_bridge/src/high_level/sportmode_test.cpp similarity index 100% rename from cpp_bridge/src/high_level/sportmode_test.cpp rename to deploy/dds_bridge/src/high_level/sportmode_test.cpp diff --git a/cpp_bridge/src/lowlevel/bridge.cpp b/deploy/dds_bridge/src/lowlevel/bridge.cpp similarity index 100% rename from cpp_bridge/src/lowlevel/bridge.cpp rename to deploy/dds_bridge/src/lowlevel/bridge.cpp diff --git a/cpp_bridge/src/simple_test.cpp b/deploy/dds_bridge/src/simple_test.cpp similarity index 100% rename from cpp_bridge/src/simple_test.cpp rename to deploy/dds_bridge/src/simple_test.cpp diff --git a/cpp_bridge/thirdparty/include/dds/config.h b/deploy/dds_bridge/thirdparty/include/dds/config.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/config.h rename to deploy/dds_bridge/thirdparty/include/dds/config.h diff --git a/cpp_bridge/thirdparty/include/dds/dds.h b/deploy/dds_bridge/thirdparty/include/dds/dds.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/dds.h rename to deploy/dds_bridge/thirdparty/include/dds/dds.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_basic_types.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_basic_types.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_basic_types.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_basic_types.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_data_allocator.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_data_allocator.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_data_allocator.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_data_allocator.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_internal_api.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_internal_api.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_internal_api.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_internal_api.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_loan_api.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_loan_api.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_loan_api.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_loan_api.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_opcodes.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_opcodes.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_opcodes.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_opcodes.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_alloc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_alloc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_alloc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_alloc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_error.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_error.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_error.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_error.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_impl.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_impl.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_impl.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_impl.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_listener.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_listener.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_listener.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_listener.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_qos.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_qos.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_qos.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_qos.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_qosdefs.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_qosdefs.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_qosdefs.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_qosdefs.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_public_status.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_status.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_public_status.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_public_status.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_rhc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_rhc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_rhc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_rhc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsc/dds_statistics.h b/deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_statistics.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsc/dds_statistics.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsc/dds_statistics.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_acknack.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_acknack.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_acknack.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_acknack.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_builtin_topic_if.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_builtin_topic_if.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_builtin_topic_if.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_builtin_topic_if.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_cdrstream.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_cdrstream.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_cdrstream.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_cdrstream.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_cfgelems.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_cfgelems.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_cfgelems.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_cfgelems.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_cfgunits.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_cfgunits.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_cfgunits.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_cfgunits.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_config.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_config.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_config.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_config.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_config_impl.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_config_impl.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_config_impl.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_config_impl.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_deadline.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_deadline.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_deadline.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_deadline.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_deliver_locally.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_deliver_locally.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_deliver_locally.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_deliver_locally.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_domaingv.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_domaingv.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_domaingv.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_domaingv.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_endpoint.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_endpoint.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_endpoint.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_endpoint.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_entity.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_entity.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_entity.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_entity.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_entity_index.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_entity_index.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_entity_index.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_entity_index.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_entity_match.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_entity_match.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_entity_match.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_entity_match.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_guid.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_guid.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_guid.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_guid.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_handshake.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_handshake.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_handshake.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_handshake.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_iid.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_iid.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_iid.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_iid.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_ipaddr.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_ipaddr.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_ipaddr.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_ipaddr.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_keyhash.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_keyhash.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_keyhash.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_keyhash.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_lifespan.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_lifespan.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_lifespan.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_lifespan.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_list_genptr.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_list_genptr.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_list_genptr.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_list_genptr.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_list_tmpl.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_list_tmpl.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_list_tmpl.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_list_tmpl.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_locator.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_locator.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_locator.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_locator.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_mcgroup.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_mcgroup.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_mcgroup.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_mcgroup.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_ownip.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_ownip.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_ownip.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_ownip.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_participant.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_participant.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_participant.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_participant.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_plist.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_plist.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_plist.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_plist.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_plist_generic.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_plist_generic.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_plist_generic.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_plist_generic.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_pmd.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_pmd.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_pmd.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_pmd.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_portmapping.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_portmapping.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_portmapping.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_portmapping.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_endpoint.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_endpoint.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_endpoint.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_endpoint.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_participant.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_participant.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_participant.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_proxy_participant.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_raweth.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_raweth.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_raweth.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_raweth.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_rhc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_rhc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_rhc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_rhc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_exchange.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_exchange.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_exchange.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_exchange.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_msg.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_msg.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_msg.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_msg.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_omg.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_omg.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_omg.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_omg.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_util.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_util.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_security_util.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_security_util.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_default.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_default.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_default.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_default.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_plist.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_plist.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_plist.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_plist.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_pserop.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_pserop.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_pserop.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_serdata_pserop.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_sertopic.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_sertopic.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_sertopic.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_sertopic.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_sertype.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_sertype.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_sertype.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_sertype.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_shm_transport.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_shm_transport.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_shm_transport.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_shm_transport.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_ssl.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_ssl.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_ssl.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_ssl.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_statistics.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_statistics.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_statistics.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_statistics.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_tcp.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_tcp.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_tcp.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_tcp.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_threadmon.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_threadmon.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_threadmon.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_threadmon.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_time.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_time.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_time.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_time.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_tkmap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_tkmap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_tkmap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_tkmap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_topic.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_topic.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_topic.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_topic.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_tran.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_tran.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_tran.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_tran.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typebuilder.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typebuilder.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typebuilder.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typebuilder.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typelib.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typelib.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typelib.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typelib.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typelookup.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typelookup.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typelookup.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typelookup.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typewrap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typewrap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_typewrap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_typewrap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_udp.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_udp.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_udp.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_udp.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_vendor.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_vendor.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_vendor.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_vendor.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_vnet.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_vnet.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_vnet.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_vnet.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_wraddrset.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_wraddrset.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_wraddrset.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_wraddrset.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xqos.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xqos.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xqos.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xqos.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_impl.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_impl.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_impl.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_impl.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.idl b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.idl similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.idl rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typeinfo.idl diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.idl b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.idl similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.idl rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typelookup.idl diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.idl b/deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.idl similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.idl rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/ddsi_xt_typemap.idl diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_addrset.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_addrset.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_addrset.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_addrset.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_bitset.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_bitset.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_bitset.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_bitset.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_bswap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_bswap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_bswap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_bswap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_ddsi_discovery.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_ddsi_discovery.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_ddsi_discovery.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_ddsi_discovery.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_debmon.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_debmon.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_debmon.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_debmon.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_feature_check.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_feature_check.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_feature_check.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_feature_check.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_freelist.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_freelist.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_freelist.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_freelist.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_gc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_gc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_gc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_gc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_hbcontrol.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_hbcontrol.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_hbcontrol.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_hbcontrol.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_init.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_init.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_init.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_init.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_inverse_uint32_set.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_inverse_uint32_set.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_inverse_uint32_set.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_inverse_uint32_set.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_lat_estim.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_lat_estim.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_lat_estim.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_lat_estim.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_lease.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_lease.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_lease.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_lease.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_log.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_log.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_log.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_log.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_misc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_misc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_misc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_misc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_pcap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_pcap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_pcap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_pcap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_protocol.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_protocol.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_protocol.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_protocol.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_qosmatch.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_qosmatch.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_qosmatch.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_qosmatch.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_radmin.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_radmin.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_radmin.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_radmin.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_receive.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_receive.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_receive.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_receive.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_rtps.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_rtps.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_rtps.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_rtps.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_sockwaitset.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_sockwaitset.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_sockwaitset.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_sockwaitset.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_thread.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_thread.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_thread.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_thread.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_transmit.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_transmit.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_transmit.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_transmit.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_unused.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_unused.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_unused.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_unused.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_whc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_whc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_whc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_whc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_xevent.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_xevent.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_xevent.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_xevent.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/q_xmsg.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/q_xmsg.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/q_xmsg.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/q_xmsg.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsi/sysdeps.h b/deploy/dds_bridge/thirdparty/include/dds/ddsi/sysdeps.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsi/sysdeps.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsi/sysdeps.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/align.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/align.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/align.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/align.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/arch.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/arch.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/arch.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/arch.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/atomics.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/atomics.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/atomics/arm.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/arm.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/atomics/arm.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/arm.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/atomics/gcc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/gcc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/atomics/gcc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/gcc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/atomics/msvc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/msvc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/atomics/msvc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/msvc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/atomics/sun.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/sun.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/atomics/sun.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/atomics/sun.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/attributes.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/attributes.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/attributes.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/attributes.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/avl.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/avl.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/avl.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/avl.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/bswap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/bswap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/bswap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/bswap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/cdtors.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/cdtors.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/cdtors.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/cdtors.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/circlist.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/circlist.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/circlist.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/circlist.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/countargs.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/countargs.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/countargs.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/countargs.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/dynlib.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/dynlib.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/dynlib.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/dynlib.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/endian.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/endian.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/endian.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/endian.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/environ.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/environ.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/environ.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/environ.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/expand_vars.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/expand_vars.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/expand_vars.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/expand_vars.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/fibheap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/fibheap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/fibheap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/fibheap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/filesystem.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/filesystem.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/filesystem.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/filesystem.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/filesystem/posix.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/filesystem/posix.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/filesystem/posix.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/filesystem/posix.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/filesystem/windows.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/filesystem/windows.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/filesystem/windows.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/filesystem/windows.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/heap.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/heap.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/heap.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/heap.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/hopscotch.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/hopscotch.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/hopscotch.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/hopscotch.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/ifaddrs.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/ifaddrs.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/ifaddrs.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/ifaddrs.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/io.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/io.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/io.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/io.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/iovec.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/iovec.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/iovec.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/iovec.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/log.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/log.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/log.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/log.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/md5.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/md5.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/md5.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/md5.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/mh3.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/mh3.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/mh3.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/mh3.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/misc.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/misc.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/misc.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/misc.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/netstat.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/netstat.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/netstat.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/netstat.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/process.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/process.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/process.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/process.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/random.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/random.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/random.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/random.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/retcode.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/retcode.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/retcode.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/retcode.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/rusage.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/rusage.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/rusage.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/rusage.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sched.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sched.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sched.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sched.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sockets.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sockets.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sockets.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sockets.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sockets/posix.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sockets/posix.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sockets/posix.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sockets/posix.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sockets/windows.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sockets/windows.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sockets/windows.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sockets/windows.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/static_assert.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/static_assert.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/static_assert.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/static_assert.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/string.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/string.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/string.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/string.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/strtod.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/strtod.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/strtod.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/strtod.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/strtol.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/strtol.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/strtol.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/strtol.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sync.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sync.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sync/freertos.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync/freertos.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sync/freertos.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync/freertos.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sync/posix.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync/posix.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sync/posix.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync/posix.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/sync/windows.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync/windows.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/sync/windows.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/sync/windows.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/threads.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/threads.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/threads/freertos.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads/freertos.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/threads/freertos.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads/freertos.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/threads/posix.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads/posix.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/threads/posix.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads/posix.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/threads/windows.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads/windows.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/threads/windows.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/threads/windows.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/time.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/time.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/time.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/time.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/time/freertos.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/time/freertos.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/time/freertos.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/time/freertos.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/types.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/types.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/types.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/types.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/types/posix.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/types/posix.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/types/posix.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/types/posix.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/types/vxworks.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/types/vxworks.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/types/vxworks.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/types/vxworks.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/types/windows.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/types/windows.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/types/windows.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/types/windows.h diff --git a/cpp_bridge/thirdparty/include/dds/ddsrt/xmlparser.h b/deploy/dds_bridge/thirdparty/include/dds/ddsrt/xmlparser.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/ddsrt/xmlparser.h rename to deploy/dds_bridge/thirdparty/include/dds/ddsrt/xmlparser.h diff --git a/cpp_bridge/thirdparty/include/dds/export.h b/deploy/dds_bridge/thirdparty/include/dds/export.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/export.h rename to deploy/dds_bridge/thirdparty/include/dds/export.h diff --git a/cpp_bridge/thirdparty/include/dds/features.h b/deploy/dds_bridge/thirdparty/include/dds/features.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/features.h rename to deploy/dds_bridge/thirdparty/include/dds/features.h diff --git a/cpp_bridge/thirdparty/include/dds/version.h b/deploy/dds_bridge/thirdparty/include/dds/version.h similarity index 100% rename from cpp_bridge/thirdparty/include/dds/version.h rename to deploy/dds_bridge/thirdparty/include/dds/version.h diff --git a/cpp_bridge/thirdparty/include/ddsc/dds.h b/deploy/dds_bridge/thirdparty/include/ddsc/dds.h similarity index 100% rename from cpp_bridge/thirdparty/include/ddsc/dds.h rename to deploy/dds_bridge/thirdparty/include/ddsc/dds.h diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/LICENSE b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/LICENSE similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/LICENSE rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/LICENSE diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/BuiltinTopicTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/BuiltinTopicTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/BuiltinTopicTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/BuiltinTopicTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Duration.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Duration.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Duration.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Duration.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Entity.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Entity.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Entity.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Entity.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Exception.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Exception.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Exception.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Exception.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/External.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/External.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/External.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/External.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/InstanceHandle.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/InstanceHandle.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/InstanceHandle.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/InstanceHandle.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/LengthUnlimited.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/LengthUnlimited.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/LengthUnlimited.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/LengthUnlimited.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Optional.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Optional.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Optional.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Optional.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/QosProvider.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/QosProvider.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/QosProvider.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/QosProvider.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Reference.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Reference.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Reference.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Reference.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/SafeEnumeration.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/SafeEnumeration.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/SafeEnumeration.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/SafeEnumeration.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/TBuiltinTopicTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TBuiltinTopicTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/TBuiltinTopicTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TBuiltinTopicTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/TEntity.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TEntity.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/TEntity.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TEntity.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/TEntityQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TEntityQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/TEntityQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TEntityQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/TInstanceHandle.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TInstanceHandle.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/TInstanceHandle.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TInstanceHandle.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/TQosProvider.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TQosProvider.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/TQosProvider.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/TQosProvider.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Time.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Time.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Time.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Time.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/Value.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Value.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/Value.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/Value.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/WeakReference.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/WeakReference.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/WeakReference.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/WeakReference.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/array.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/array.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/array.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/array.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/Condition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/Condition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/Condition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/Condition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/GuardCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/GuardCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/GuardCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/GuardCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/StatusCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/StatusCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/StatusCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/StatusCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TGuardCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TGuardCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TGuardCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TGuardCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TStatusCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TStatusCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TStatusCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TStatusCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TWaitSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TWaitSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/TWaitSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/TWaitSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/WaitSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/WaitSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/WaitSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/WaitSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/Condition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/Condition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/Condition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/Condition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/GuardCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/GuardCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/GuardCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/GuardCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/StatusCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/StatusCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/StatusCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/StatusCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TConditionImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TConditionImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TConditionImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TConditionImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TGuardConditionImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TGuardConditionImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TGuardConditionImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TGuardConditionImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TStatusConditionImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TStatusConditionImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TStatusConditionImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TStatusConditionImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TWaitSetImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TWaitSetImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TWaitSetImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/TWaitSetImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/WaitSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/WaitSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/WaitSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/cond/detail/WaitSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/conformance.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/conformance.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/conformance.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/conformance.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/ddscore.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/ddscore.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/ddscore.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/ddscore.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/BuiltinTopicTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/BuiltinTopicTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/BuiltinTopicTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/BuiltinTopicTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/Entity.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/Entity.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/Entity.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/Entity.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/InstanceHandle.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/InstanceHandle.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/InstanceHandle.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/InstanceHandle.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/QosProvider.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/QosProvider.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/QosProvider.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/QosProvider.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/ReferenceImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/ReferenceImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/ReferenceImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/ReferenceImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityQosImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityQosImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityQosImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TEntityQosImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TInstanceHandleImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TInstanceHandleImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TInstanceHandleImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TInstanceHandleImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TQosProviderImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TQosProviderImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/TQosProviderImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/TQosProviderImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/Value.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/Value.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/Value.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/Value.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/WeakReferenceImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/WeakReferenceImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/WeakReferenceImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/WeakReferenceImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/array.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/array.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/array.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/array.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/conformance.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/conformance.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/conformance.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/conformance.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/ddscore.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/ddscore.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/ddscore.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/ddscore.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/export.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/export.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/export.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/export.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/inttypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/inttypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/inttypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/inttypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/macros.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/macros.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/macros.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/macros.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/module_docs.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/module_docs.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/module_docs.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/module_docs.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/old_win_stdint.h b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/old_win_stdint.h similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/old_win_stdint.h rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/old_win_stdint.h diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/ref_traits.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/ref_traits.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/detail/ref_traits.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/detail/ref_traits.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/macros.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/macros.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/macros.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/macros.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/CorePolicy.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/CorePolicy.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/CorePolicy.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/CorePolicy.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/PolicyKind.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/PolicyKind.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/PolicyKind.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/PolicyKind.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/QosPolicyCount.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/QosPolicyCount.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/QosPolicyCount.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/QosPolicyCount.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/TCorePolicy.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/TCorePolicy.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/TCorePolicy.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/TCorePolicy.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/TQosPolicyCount.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/TQosPolicyCount.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/TQosPolicyCount.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/TQosPolicyCount.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/CorePolicy.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/CorePolicy.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/CorePolicy.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/CorePolicy.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/QosPolicyCount.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/QosPolicyCount.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/QosPolicyCount.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/QosPolicyCount.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TCorePolicyImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TCorePolicyImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TCorePolicyImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TCorePolicyImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TQosPolicyCountImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TQosPolicyCountImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TQosPolicyCountImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/policy/detail/TQosPolicyCountImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/ref_traits.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/ref_traits.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/ref_traits.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/ref_traits.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/refmacros.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/refmacros.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/refmacros.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/refmacros.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/status/State.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/State.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/status/State.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/State.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/status/Status.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/Status.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/status/Status.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/Status.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/status/TStatus.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/TStatus.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/status/TStatus.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/TStatus.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/status/detail/Status.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/detail/Status.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/status/detail/Status.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/detail/Status.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/status/detail/TStatusImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/detail/TStatusImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/status/detail/TStatusImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/status/detail/TStatusImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/types.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/types.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/types.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/types.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/Annotations.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/Annotations.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/Annotations.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/Annotations.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/CollectionTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/CollectionTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/CollectionTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/CollectionTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicData.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicData.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicData.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicData.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/DynamicType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/MemberType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/MemberType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/MemberType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/MemberType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/PrimitiveTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/PrimitiveTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/PrimitiveTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/PrimitiveTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/StructType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/StructType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/StructType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/StructType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TAnnotation.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TAnnotation.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TAnnotation.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TAnnotation.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TCollectionTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TCollectionTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TCollectionTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TCollectionTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicData.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicData.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicData.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicData.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TDynamicType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TMemberType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TMemberType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TMemberType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TMemberType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TStructType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TStructType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TStructType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TStructType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TTypeProvider.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TTypeProvider.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TTypeProvider.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TTypeProvider.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeKind.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeKind.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeKind.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeKind.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeProvider.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeProvider.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeProvider.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/TypeProvider.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionCase.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionCase.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionCase.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionCase.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/UnionType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/Annotation.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/Annotation.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/Annotation.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/Annotation.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/CollectionTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/CollectionTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/CollectionTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/CollectionTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicData.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicData.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicData.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicData.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/DynamicType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/MemberType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/MemberType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/MemberType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/MemberType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/PrimitiveTypes.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/PrimitiveTypes.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/PrimitiveTypes.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/PrimitiveTypes.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/StructType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/StructType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/StructType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/StructType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/TypeProvider.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/TypeProvider.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/TypeProvider.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/TypeProvider.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionCase.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionCase.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionCase.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionCase.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionType.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionType.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionType.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/core/xtypes/detail/UnionType.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/dds.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/dds.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/dds.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/dds.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipant.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipant.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipant.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipant.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipantListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipantListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipantListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/DomainParticipantListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/TDomainParticipant.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/TDomainParticipant.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/TDomainParticipant.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/TDomainParticipant.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/ddsdomain.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/ddsdomain.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/ddsdomain.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/ddsdomain.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/detail/DomainParticipant.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/detail/DomainParticipant.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/detail/DomainParticipant.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/detail/DomainParticipant.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/detail/TDomainParticipantImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/detail/TDomainParticipantImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/detail/TDomainParticipantImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/detail/TDomainParticipantImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/detail/ddsdomain.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/detail/ddsdomain.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/detail/ddsdomain.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/detail/ddsdomain.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/qos/DomainParticipantQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/qos/DomainParticipantQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/qos/DomainParticipantQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/qos/DomainParticipantQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/domain/qos/detail/DomainParticipantQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/qos/detail/DomainParticipantQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/domain/qos/detail/DomainParticipantQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/domain/qos/detail/DomainParticipantQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/features.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/features.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/features.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/features.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriterListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriterListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriterListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/AnyDataWriterListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/CoherentSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/CoherentSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/CoherentSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/CoherentSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/DataWriter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/DataWriter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/DataWriter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/DataWriter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/DataWriterListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/DataWriterListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/DataWriterListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/DataWriterListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/Publisher.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/Publisher.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/Publisher.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/Publisher.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/PublisherListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/PublisherListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/PublisherListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/PublisherListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/SuspendedPublication.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/SuspendedPublication.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/SuspendedPublication.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/SuspendedPublication.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/TAnyDataWriter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TAnyDataWriter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/TAnyDataWriter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TAnyDataWriter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/TCoherentSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TCoherentSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/TCoherentSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TCoherentSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/TPublisher.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TPublisher.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/TPublisher.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TPublisher.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/TSuspendedPublication.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TSuspendedPublication.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/TSuspendedPublication.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/TSuspendedPublication.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/ddspub.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/ddspub.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/ddspub.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/ddspub.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/AnyDataWriter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/AnyDataWriter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/AnyDataWriter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/AnyDataWriter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/CoherentSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/CoherentSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/CoherentSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/CoherentSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriterImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriterImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriterImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/DataWriterImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/Publisher.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/Publisher.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/Publisher.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/Publisher.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/SuspendedPublication.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/SuspendedPublication.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/SuspendedPublication.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/SuspendedPublication.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TAnyDataWriterImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TAnyDataWriterImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TAnyDataWriterImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TAnyDataWriterImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TCoherentSetImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TCoherentSetImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TCoherentSetImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TCoherentSetImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TPublisherImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TPublisherImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TPublisherImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TPublisherImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TSuspendedPublicationImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TSuspendedPublicationImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/TSuspendedPublicationImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/TSuspendedPublicationImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/ddspub.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/ddspub.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/ddspub.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/ddspub.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/detail/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/detail/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/DataWriterQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/DataWriterQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/DataWriterQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/DataWriterQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/PublisherQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/PublisherQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/PublisherQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/PublisherQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/DataWriterQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/DataWriterQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/DataWriterQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/DataWriterQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/PublisherQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/PublisherQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/PublisherQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/pub/qos/detail/PublisherQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReader.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReader.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReader.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReader.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReaderListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReaderListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReaderListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/AnyDataReaderListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/CoherentAccess.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/CoherentAccess.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/CoherentAccess.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/CoherentAccess.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/DataReader.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/DataReader.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/DataReader.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/DataReader.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/DataReaderListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/DataReaderListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/DataReaderListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/DataReaderListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/GenerationCount.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/GenerationCount.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/GenerationCount.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/GenerationCount.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/LoanedSamples.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/LoanedSamples.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/LoanedSamples.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/LoanedSamples.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/Query.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Query.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/Query.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Query.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/Rank.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Rank.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/Rank.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Rank.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/Sample.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Sample.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/Sample.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Sample.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/SampleInfo.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SampleInfo.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/SampleInfo.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SampleInfo.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/SampleRef.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SampleRef.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/SampleRef.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SampleRef.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/SharedSamples.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SharedSamples.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/SharedSamples.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SharedSamples.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/Subscriber.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Subscriber.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/Subscriber.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/Subscriber.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/SubscriberListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SubscriberListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/SubscriberListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/SubscriberListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TAnyDataReader.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TAnyDataReader.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TAnyDataReader.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TAnyDataReader.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TCoherentAccess.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TCoherentAccess.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TCoherentAccess.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TCoherentAccess.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TDataReader.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TDataReader.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TDataReader.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TDataReader.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TGenerationCount.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TGenerationCount.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TGenerationCount.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TGenerationCount.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TQuery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TQuery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TQuery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TQuery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TRank.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TRank.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TRank.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TRank.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSample.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSample.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSample.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSample.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSampleInfo.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSampleInfo.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSampleInfo.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSampleInfo.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSampleRef.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSampleRef.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSampleRef.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSampleRef.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSubscriber.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSubscriber.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/TSubscriber.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/TSubscriber.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/QueryCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/QueryCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/QueryCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/QueryCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/ReadCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/ReadCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/ReadCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/ReadCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/TQueryCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/TQueryCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/TQueryCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/TQueryCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/TReadCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/TReadCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/TReadCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/TReadCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/QueryCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/QueryCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/QueryCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/QueryCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/ReadCondition.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/ReadCondition.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/ReadCondition.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/ReadCondition.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TQueryConditionImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TQueryConditionImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TQueryConditionImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TQueryConditionImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TReadConditionImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TReadConditionImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TReadConditionImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/cond/detail/TReadConditionImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/ddssub.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/ddssub.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/ddssub.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/ddssub.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/AnyDataReader.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/AnyDataReader.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/AnyDataReader.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/AnyDataReader.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/CoherentAccess.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/CoherentAccess.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/CoherentAccess.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/CoherentAccess.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/DataReader.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/DataReader.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/DataReader.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/DataReader.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/GenerationCount.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/GenerationCount.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/GenerationCount.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/GenerationCount.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamples.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamples.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamples.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamples.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamplesImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamplesImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamplesImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/LoanedSamplesImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Manipulators.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Manipulators.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Manipulators.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Manipulators.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Query.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Query.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Query.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Query.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Rank.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Rank.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Rank.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Rank.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Sample.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Sample.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Sample.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Sample.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleInfo.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleInfo.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleInfo.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleInfo.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleRef.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleRef.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleRef.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SampleRef.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SamplesHolder.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SamplesHolder.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SamplesHolder.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SamplesHolder.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamples.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamples.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamples.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamples.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamplesImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamplesImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamplesImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/SharedSamplesImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Subscriber.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Subscriber.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/Subscriber.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/Subscriber.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TAnyDataReaderImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TAnyDataReaderImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TAnyDataReaderImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TAnyDataReaderImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TCoherentAccessImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TCoherentAccessImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TCoherentAccessImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TCoherentAccessImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TDataReaderImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TDataReaderImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TDataReaderImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TDataReaderImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TGenerationCountImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TGenerationCountImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TGenerationCountImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TGenerationCountImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TQueryImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TQueryImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TQueryImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TQueryImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TRankImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TRankImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TRankImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TRankImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleInfoImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleInfoImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleInfoImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleInfoImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleRefImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleRefImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleRefImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSampleRefImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSubscriberImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSubscriberImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSubscriberImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/TSubscriberImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/ddssub.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/ddssub.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/ddssub.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/ddssub.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/detail/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/detail/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/DataReaderQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/DataReaderQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/DataReaderQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/DataReaderQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/SubscriberQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/SubscriberQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/SubscriberQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/SubscriberQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/DataReaderQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/DataReaderQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/DataReaderQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/DataReaderQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/SubscriberQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/SubscriberQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/SubscriberQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/qos/detail/SubscriberQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/status/DataState.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/status/DataState.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/status/DataState.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/status/DataState.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/sub/status/detail/DataStateImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/status/detail/DataStateImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/sub/status/detail/DataStateImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/sub/status/detail/DataStateImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopicListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopicListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopicListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/AnyTopicListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopicKey.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopicKey.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopicKey.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/BuiltinTopicKey.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/ContentFilteredTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/ContentFilteredTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/ContentFilteredTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/ContentFilteredTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/Filter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/Filter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/Filter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/Filter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/MultiTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/MultiTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/MultiTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/MultiTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TAnyTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TAnyTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TAnyTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TAnyTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopicKey.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopicKey.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopicKey.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TBuiltinTopicKey.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TContentFilteredTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TContentFilteredTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TContentFilteredTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TContentFilteredTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TFilter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TFilter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TFilter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TFilter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TMultiTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TMultiTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TMultiTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TMultiTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TTopicDescription.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TTopicDescription.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TTopicDescription.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TTopicDescription.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/Topic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/Topic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/Topic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/Topic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicDescription.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicDescription.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicDescription.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicDescription.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicInstance.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicInstance.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicInstance.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicInstance.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicTraits.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicTraits.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/TopicTraits.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/TopicTraits.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/ddstopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/ddstopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/ddstopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/ddstopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/AnyTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/AnyTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/AnyTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/AnyTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopicKey.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopicKey.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopicKey.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/BuiltinTopicKey.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/ContentFilteredTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/ContentFilteredTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/ContentFilteredTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/ContentFilteredTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/Filter.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/Filter.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/Filter.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/Filter.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/MultiTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/MultiTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/MultiTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/MultiTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TAnyTopicImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TAnyTopicImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TAnyTopicImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TAnyTopicImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicKeyImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicKeyImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicKeyImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TBuiltinTopicKeyImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TContentFilteredTopicImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TContentFilteredTopicImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TContentFilteredTopicImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TContentFilteredTopicImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TFilterImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TFilterImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TFilterImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TFilterImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicDescriptionImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicDescriptionImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicDescriptionImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicDescriptionImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TTopicImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/Topic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/Topic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/Topic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/Topic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicDescription.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicDescription.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicDescription.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicDescription.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicInstanceImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicInstanceImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicInstanceImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/TopicInstanceImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/ddstopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/ddstopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/ddstopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/ddstopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/detail/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/detail/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/qos/TopicQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/qos/TopicQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/qos/TopicQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/qos/TopicQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/dds/topic/qos/detail/TopicQos.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/qos/detail/TopicQos.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/dds/topic/qos/detail/TopicQos.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/dds/topic/qos/detail/TopicQos.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/ForwardDeclarations.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/ForwardDeclarations.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/ForwardDeclarations.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/ForwardDeclarations.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/DDScObjectDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/DDScObjectDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/DDScObjectDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/DDScObjectDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityRegistry.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityRegistry.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityRegistry.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntityRegistry.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntitySet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntitySet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntitySet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/EntitySet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/InstanceHandleDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/InstanceHandleDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/InstanceHandleDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/InstanceHandleDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ListenerDispatcher.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ListenerDispatcher.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ListenerDispatcher.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ListenerDispatcher.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/MiscUtils.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/MiscUtils.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/MiscUtils.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/MiscUtils.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Missing.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Missing.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Missing.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Missing.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Mutex.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Mutex.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Mutex.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/Mutex.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ObjectSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/QosProviderDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/QosProviderDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/QosProviderDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/QosProviderDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ReportUtils.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ReportUtils.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ReportUtils.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ReportUtils.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ScopedLock.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ScopedLock.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ScopedLock.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/ScopedLock.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/TimeHelper.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/TimeHelper.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/TimeHelper.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/TimeHelper.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/WeakReferenceSet.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/WeakReferenceSet.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/WeakReferenceSet.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/WeakReferenceSet.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/basic_cdr_ser.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/basic_cdr_ser.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/basic_cdr_ser.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/basic_cdr_ser.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_enums.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_enums.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_enums.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_enums.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_stream.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_stream.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_stream.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/cdr_stream.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/entity_properties.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/entity_properties.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/entity_properties.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/entity_properties.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v1_ser.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v1_ser.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v1_ser.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v1_ser.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v2_ser.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v2_ser.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v2_ser.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/extended_cdr_v2_ser.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/fragchain.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/fragchain.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/fragchain.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cdr/fragchain.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ConditionDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ConditionDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ConditionDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ConditionDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/FunctorHolder.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/FunctorHolder.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/FunctorHolder.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/FunctorHolder.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/GuardConditionDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/GuardConditionDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/GuardConditionDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/GuardConditionDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ShadowParticipant.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ShadowParticipant.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ShadowParticipant.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/ShadowParticipant.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/StatusConditionDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/StatusConditionDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/StatusConditionDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/StatusConditionDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/WaitSetDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/WaitSetDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/WaitSetDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/cond/WaitSetDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/config.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/config.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/config.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/config.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/Policy.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/Policy.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/Policy.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/Policy.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/PolicyDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/PolicyDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/PolicyDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/PolicyDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/ProprietaryPolicyKind.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/ProprietaryPolicyKind.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/ProprietaryPolicyKind.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/ProprietaryPolicyKind.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/QosPolicyCountDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/QosPolicyCountDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/QosPolicyCountDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/QosPolicyCountDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/TPolicy.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/TPolicy.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/TPolicy.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/policy/TPolicy.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/status/StatusDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/status/StatusDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/status/StatusDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/status/StatusDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/type_helpers.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/type_helpers.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/type_helpers.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/core/type_helpers.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/Domain.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/Domain.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/Domain.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/Domain.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantRegistry.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantRegistry.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantRegistry.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainParticipantRegistry.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainWrap.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainWrap.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainWrap.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/DomainWrap.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/qos/DomainParticipantQosDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/qos/DomainParticipantQosDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/qos/DomainParticipantQosDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/domain/qos/DomainParticipantQosDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/AnyDataWriterDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/AnyDataWriterDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/AnyDataWriterDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/AnyDataWriterDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/CoherentSetDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/CoherentSetDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/CoherentSetDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/CoherentSetDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/PublisherDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/PublisherDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/PublisherDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/PublisherDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/SuspendedPublicationDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/SuspendedPublicationDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/SuspendedPublicationDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/SuspendedPublicationDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/DataWriterQosDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/DataWriterQosDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/DataWriterQosDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/DataWriterQosDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/PublisherQosDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/PublisherQosDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/PublisherQosDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/pub/qos/PublisherQosDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/AnyDataReaderDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/AnyDataReaderDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/AnyDataReaderDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/AnyDataReaderDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/BuiltinSubscriberDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/BuiltinSubscriberDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/BuiltinSubscriberDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/BuiltinSubscriberDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/CoherentAccessDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/CoherentAccessDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/CoherentAccessDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/CoherentAccessDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/GenerationCountImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/GenerationCountImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/GenerationCountImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/GenerationCountImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/QueryDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/QueryDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/QueryDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/QueryDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/RankImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/RankImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/RankImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/RankImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SampleInfoImpl.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SampleInfoImpl.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SampleInfoImpl.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SampleInfoImpl.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SubscriberDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SubscriberDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SubscriberDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/SubscriberDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/QueryConditionDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/QueryConditionDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/QueryConditionDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/QueryConditionDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/ReadConditionDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/ReadConditionDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/ReadConditionDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/cond/ReadConditionDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/DataReaderQosDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/DataReaderQosDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/DataReaderQosDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/DataReaderQosDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/SubscriberQosDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/SubscriberQosDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/SubscriberQosDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/sub/qos/SubscriberQosDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/AnyTopicListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicCopy.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicCopy.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicCopy.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicCopy.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicKeyDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicKeyDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicKeyDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicKeyDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicTraits.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicTraits.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicTraits.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/BuiltinTopicTraits.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/CDRBlob.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/CDRBlob.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/CDRBlob.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/CDRBlob.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/FilterDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/FilterDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/FilterDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/FilterDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TBuiltinTopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TBuiltinTopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TBuiltinTopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TBuiltinTopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicDescriptionDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicDescriptionDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicDescriptionDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicDescriptionDelegate.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicListener.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicListener.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicListener.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicListener.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicTraits.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicTraits.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicTraits.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/TopicTraits.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/datatopic.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/datatopic.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/datatopic.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/datatopic.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/discovery.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/discovery.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/discovery.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/discovery.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/find.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/find.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/find.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/find.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/hash.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/hash.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/hash.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/hash.hpp diff --git a/cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/qos/TopicQosDelegate.hpp b/deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/qos/TopicQosDelegate.hpp similarity index 100% rename from cpp_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/qos/TopicQosDelegate.hpp rename to deploy/dds_bridge/thirdparty/include/ddscxx/org/eclipse/cyclonedds/topic/qos/TopicQosDelegate.hpp diff --git a/deploy/ros2_ws/src/lidar_node/CMakeLists.txt b/deploy/perception_ws/src/lidar_node/CMakeLists.txt similarity index 100% rename from deploy/ros2_ws/src/lidar_node/CMakeLists.txt rename to deploy/perception_ws/src/lidar_node/CMakeLists.txt diff --git a/deploy/ros2_ws/src/lidar_node/README.md b/deploy/perception_ws/src/lidar_node/README.md similarity index 100% rename from deploy/ros2_ws/src/lidar_node/README.md rename to deploy/perception_ws/src/lidar_node/README.md diff --git a/deploy/ros2_ws/src/lidar_node/Version.h.in b/deploy/perception_ws/src/lidar_node/Version.h.in similarity index 100% rename from deploy/ros2_ws/src/lidar_node/Version.h.in rename to deploy/perception_ws/src/lidar_node/Version.h.in diff --git a/deploy/ros2_ws/src/lidar_node/config/config.yaml b/deploy/perception_ws/src/lidar_node/config/config.yaml similarity index 100% rename from deploy/ros2_ws/src/lidar_node/config/config.yaml rename to deploy/perception_ws/src/lidar_node/config/config.yaml diff --git a/deploy/ros2_ws/src/lidar_node/launch/dashing_start.py b/deploy/perception_ws/src/lidar_node/launch/dashing_start.py similarity index 100% rename from deploy/ros2_ws/src/lidar_node/launch/dashing_start.py rename to deploy/perception_ws/src/lidar_node/launch/dashing_start.py diff --git a/deploy/ros2_ws/src/lidar_node/launch/start.launch b/deploy/perception_ws/src/lidar_node/launch/start.launch similarity index 100% rename from deploy/ros2_ws/src/lidar_node/launch/start.launch rename to deploy/perception_ws/src/lidar_node/launch/start.launch diff --git a/deploy/ros2_ws/src/lidar_node/launch/start.py b/deploy/perception_ws/src/lidar_node/launch/start.py similarity index 100% rename from deploy/ros2_ws/src/lidar_node/launch/start.py rename to deploy/perception_ws/src/lidar_node/launch/start.py diff --git a/deploy/ros2_ws/src/lidar_node/msg/UdpFrame.msg b/deploy/perception_ws/src/lidar_node/msg/UdpFrame.msg similarity index 100% rename from deploy/ros2_ws/src/lidar_node/msg/UdpFrame.msg rename to deploy/perception_ws/src/lidar_node/msg/UdpFrame.msg diff --git a/deploy/ros2_ws/src/lidar_node/msg/UdpPacket.msg b/deploy/perception_ws/src/lidar_node/msg/UdpPacket.msg similarity index 100% rename from deploy/ros2_ws/src/lidar_node/msg/UdpPacket.msg rename to deploy/perception_ws/src/lidar_node/msg/UdpPacket.msg diff --git a/deploy/ros2_ws/src/lidar_node/msg/msg_ros2/UdpFrame.msg b/deploy/perception_ws/src/lidar_node/msg/msg_ros2/UdpFrame.msg similarity index 100% rename from deploy/ros2_ws/src/lidar_node/msg/msg_ros2/UdpFrame.msg rename to deploy/perception_ws/src/lidar_node/msg/msg_ros2/UdpFrame.msg diff --git a/deploy/ros2_ws/src/lidar_node/msg/msg_ros2/UdpPacket.msg b/deploy/perception_ws/src/lidar_node/msg/msg_ros2/UdpPacket.msg similarity index 100% rename from deploy/ros2_ws/src/lidar_node/msg/msg_ros2/UdpPacket.msg rename to deploy/perception_ws/src/lidar_node/msg/msg_ros2/UdpPacket.msg diff --git a/deploy/ros2_ws/src/lidar_node/node/hesai_ros_driver_node.cc b/deploy/perception_ws/src/lidar_node/node/hesai_ros_driver_node.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/node/hesai_ros_driver_node.cc rename to deploy/perception_ws/src/lidar_node/node/hesai_ros_driver_node.cc diff --git a/deploy/ros2_ws/src/lidar_node/node/hesai_ros_driver_node.cu b/deploy/perception_ws/src/lidar_node/node/hesai_ros_driver_node.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/node/hesai_ros_driver_node.cu rename to deploy/perception_ws/src/lidar_node/node/hesai_ros_driver_node.cu diff --git a/deploy/ros2_ws/src/lidar_node/package.xml b/deploy/perception_ws/src/lidar_node/package.xml similarity index 100% rename from deploy/ros2_ws/src/lidar_node/package.xml rename to deploy/perception_ws/src/lidar_node/package.xml diff --git a/deploy/ros2_ws/src/lidar_node/rviz/rviz.rviz b/deploy/perception_ws/src/lidar_node/rviz/rviz.rviz similarity index 100% rename from deploy/ros2_ws/src/lidar_node/rviz/rviz.rviz rename to deploy/perception_ws/src/lidar_node/rviz/rviz.rviz diff --git a/deploy/ros2_ws/src/lidar_node/rviz/rviz2.rviz b/deploy/perception_ws/src/lidar_node/rviz/rviz2.rviz similarity index 100% rename from deploy/ros2_ws/src/lidar_node/rviz/rviz2.rviz rename to deploy/perception_ws/src/lidar_node/rviz/rviz2.rviz diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/CMakeLists.txt b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/CMakeLists.txt similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/CMakeLists.txt rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/CMakeLists.txt diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/LICENSE b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/LICENSE similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/LICENSE rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/LICENSE diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/README.md b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/README.md similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/README.md rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/README.md diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/Version.h.in b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/Version.h.in similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/Version.h.in rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/Version.h.in diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/change notes.md b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/change notes.md similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/change notes.md rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/change notes.md diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/AT128E2X_Angle Correction File.dat b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/AT128E2X_Angle Correction File.dat similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/AT128E2X_Angle Correction File.dat rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/AT128E2X_Angle Correction File.dat diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/FT120C1X_Angle Correction File.dat b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/FT120C1X_Angle Correction File.dat similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/FT120C1X_Angle Correction File.dat rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/FT120C1X_Angle Correction File.dat diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/OT128_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/OT128_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/OT128_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/OT128_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar128E3X_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar128E3X_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar128E3X_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar128E3X_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40M_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40M_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40M_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40M_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40P_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40P_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40P_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar40P_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar64_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar64_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar64_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar64_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar90E3X_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar90E3X_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar90E3X_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/Pandar90E3X_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarQT_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarQT_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarQT_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarQT_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT-16_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT-16_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT-16_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT-16_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/PandarXT_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Channel_Cofig.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Channel_Cofig.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Channel_Cofig.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/QT128C2X_Channel_Cofig.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/XT32M2X_Angle Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/XT32M2X_Angle Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/XT32M2X_Angle Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/angle_correction/XT32M2X_Angle Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/AT128E2X_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/AT128E2X_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/AT128E2X_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/AT128E2X_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar128E3X_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar128E3X_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar128E3X_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar128E3X_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40E3X_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40E3X_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40E3X_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40E3X_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40P_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40P_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40P_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar40P_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64E3X_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64E3X_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64E3X_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64E3X_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar64_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar90_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar90_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar90_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/Pandar90_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT-16_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT-16_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT-16_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT-16_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/PandarXT_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/QT128C2X_Firetime Correction File.csv b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/QT128C2X_Firetime Correction File.csv similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/QT128C2X_Firetime Correction File.csv rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/correction/firetime_correction/QT128C2X_Firetime Correction File.csv diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk.hpp b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk.hpp similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk.hpp rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk.hpp diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk_gpu.cuh b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk_gpu.cuh similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk_gpu.cuh rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/driver/hesai_lidar_sdk_gpu.cuh diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/CMakeLists.txt b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/CMakeLists.txt similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/CMakeLists.txt rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/CMakeLists.txt diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/blocking_ring.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/blocking_ring.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/blocking_ring.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/blocking_ring.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2d_shared.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2d_shared.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2d_shared.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2d_shared.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2dex.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2dex.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2dex.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/include/ring_2dex.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/blocking_ring.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/blocking_ring.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/blocking_ring.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/blocking_ring.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2d_shared.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2d_shared.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2d_shared.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2d_shared.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2dex.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2dex.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2dex.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Container/src/ring_2dex.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar_types.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar_types.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar_types.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Lidar/lidar_types.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/include/logger.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/include/logger.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/include/logger.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/include/logger.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/src/logger.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/src/logger.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/src/logger.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Logger/src/logger.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/client_base.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/client_base.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/client_base.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/client_base.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/lidar_communication_header.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/lidar_communication_header.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/lidar_communication_header.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/lidar_communication_header.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/ptc_client.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/ptc_client.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/ptc_client.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/ptc_client.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_client.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_client.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_client.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_client.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_ssl_client.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_ssl_client.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_ssl_client.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/include/tcp_ssl_client.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/ptc_client.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/ptc_client.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/ptc_client.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/ptc_client.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_client.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_client.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_client.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_client.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_ssl_client.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_ssl_client.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_ssl_client.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcClient/src/tcp_ssl_client.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/general_ptc_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/general_ptc_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/general_ptc_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/general_ptc_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_1_0_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_1_0_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_1_0_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_1_0_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_2_0_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_2_0_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_2_0_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/include/ptc_2_0_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/ptc_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/general_ptc_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/general_ptc_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/general_ptc_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/general_ptc_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_1_0_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_1_0_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_1_0_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_1_0_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_2_0_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_2_0_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_2_0_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/PtcParser/src/ptc_2_0_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_saver.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_saver.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_saver.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_saver.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_source.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_source.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_source.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/pcap_source.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/socket_source.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/socket_source.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/socket_source.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/socket_source.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/source.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/source.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/source.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/include/source.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_saver.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_saver.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_saver.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_saver.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_source.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_source.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_source.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/pcap_source.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/socket_source.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/socket_source.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/socket_source.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/socket_source.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/source.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/source.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/source.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/Source/src/source.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/general_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/general_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/general_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/general_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp1_4_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp1_4_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp1_4_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp1_4_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_4_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_4_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_4_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_4_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_5_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_5_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_5_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp2_5_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_1_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_1_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_1_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_1_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_2_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_2_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_2_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp3_2_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp4_3_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp4_3_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp4_3_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp4_3_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp6_1_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp6_1_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp6_1_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp6_1_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp7_2_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp7_2_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp7_2_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp7_2_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p40_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p40_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p40_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p40_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p64_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p64_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p64_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/include/udp_p64_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/general_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/general_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/general_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/general_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp1_4_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp1_4_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp1_4_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp1_4_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_4_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_4_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_4_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_4_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_5_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_5_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_5_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp2_5_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_1_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_1_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_1_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_1_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_2_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_2_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_2_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp3_2_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp4_3_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp4_3_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp4_3_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp4_3_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp6_1_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp6_1_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp6_1_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp6_1_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp7_2_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp7_2_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp7_2_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp7_2_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p40_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p40_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p40_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p40_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p64_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p64_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p64_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/src/udp_p64_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParser/udp_parser.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/general_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/general_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/general_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/general_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/nvbuffer.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/nvbuffer.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/nvbuffer.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/nvbuffer.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/return_code.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/return_code.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/return_code.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/return_code.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/safe_call.cuh b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/safe_call.cuh similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/safe_call.cuh rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/safe_call.cuh diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp1_4_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp1_4_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp1_4_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp1_4_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp2_5_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp2_5_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp2_5_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp2_5_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_1_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_1_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_1_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_1_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_2_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_2_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_2_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp3_2_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp4_3_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp4_3_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp4_3_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp4_3_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp6_1_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp6_1_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp6_1_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp6_1_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp7_2_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp7_2_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp7_2_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp7_2_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p40_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p40_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p40_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p40_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p64_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p64_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p64_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/include/udp_p64_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/buffer.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/buffer.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/buffer.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/buffer.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/general_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/general_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/general_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/general_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp1_4_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp1_4_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp1_4_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp1_4_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp2_5_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp2_5_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp2_5_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp2_5_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_1_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_1_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_1_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_1_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_2_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_2_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_2_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp3_2_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp4_3_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp4_3_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp4_3_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp4_3_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp6_1_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp6_1_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp6_1_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp6_1_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp7_2_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp7_2_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp7_2_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp7_2_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p40_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p40_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p40_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p40_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p64_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p64_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p64_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/src/udp_p64_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpParserGpu/udp_parser_gpu.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/fault_message.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/fault_message.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/fault_message.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/fault_message.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_header.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_header.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_header.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_header.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p40.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p40.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p40.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p40.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p64.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p64.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p64.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_p64.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v1_4.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v1_4.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v1_4.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v1_4.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_4.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_4.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_4.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_4.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_5.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_5.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_5.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v2_5.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_1.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_1.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_1.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_1.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_2.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_2.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_2.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v3_2.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v4_3.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v4_3.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v4_3.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v4_3.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v6_1.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v6_1.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v6_1.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v6_1.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v7_2.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v7_2.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v7_2.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/UdpProtocol/udp_protocol_v7_2.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/driver_param.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/driver_param.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/driver_param.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/driver_param.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/auto_tick_count.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/auto_tick_count.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/auto_tick_count.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/auto_tick_count.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/plat_utils.h b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/plat_utils.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/plat_utils.h rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/include/plat_utils.h diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/auto_tick_count.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/auto_tick_count.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/auto_tick_count.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/auto_tick_count.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/plat_utils.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/plat_utils.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/plat_utils.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/libhesai/src/plat_utils.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/test/test.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/CMakeLists.txt b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/CMakeLists.txt similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/CMakeLists.txt rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/CMakeLists.txt diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/Version.h.in b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/Version.h.in similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/Version.h.in rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/Version.h.in diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/packet_loss_tool.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/packet_loss_tool.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/packet_loss_tool.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/packet_loss_tool.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cc b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cc rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cu b/deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cu rename to deploy/perception_ws/src/lidar_node/src/driver/HesaiLidar_SDK_2.0/tool/pcl_tool.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/manager/node_manager.cc b/deploy/perception_ws/src/lidar_node/src/manager/node_manager.cc similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/manager/node_manager.cc rename to deploy/perception_ws/src/lidar_node/src/manager/node_manager.cc diff --git a/deploy/ros2_ws/src/lidar_node/src/manager/node_manager.cu b/deploy/perception_ws/src/lidar_node/src/manager/node_manager.cu similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/manager/node_manager.cu rename to deploy/perception_ws/src/lidar_node/src/manager/node_manager.cu diff --git a/deploy/ros2_ws/src/lidar_node/src/manager/node_manager.h b/deploy/perception_ws/src/lidar_node/src/manager/node_manager.h similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/manager/node_manager.h rename to deploy/perception_ws/src/lidar_node/src/manager/node_manager.h diff --git a/deploy/ros2_ws/src/lidar_node/src/manager/source_driver_ros1.hpp b/deploy/perception_ws/src/lidar_node/src/manager/source_driver_ros1.hpp similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/manager/source_driver_ros1.hpp rename to deploy/perception_ws/src/lidar_node/src/manager/source_driver_ros1.hpp diff --git a/deploy/ros2_ws/src/lidar_node/src/manager/source_driver_ros2.hpp b/deploy/perception_ws/src/lidar_node/src/manager/source_driver_ros2.hpp similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/manager/source_driver_ros2.hpp rename to deploy/perception_ws/src/lidar_node/src/manager/source_driver_ros2.hpp diff --git a/deploy/ros2_ws/src/lidar_node/src/utility/yaml_reader.hpp b/deploy/perception_ws/src/lidar_node/src/utility/yaml_reader.hpp similarity index 100% rename from deploy/ros2_ws/src/lidar_node/src/utility/yaml_reader.hpp rename to deploy/perception_ws/src/lidar_node/src/utility/yaml_reader.hpp diff --git a/deploy/robot_ws/install/.colcon_install_layout b/deploy/robot_ws/install/.colcon_install_layout new file mode 100644 index 0000000..3aad533 --- /dev/null +++ b/deploy/robot_ws/install/.colcon_install_layout @@ -0,0 +1 @@ +isolated diff --git a/deploy/robot_ws/install/COLCON_IGNORE b/deploy/robot_ws/install/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/install/_local_setup_util_ps1.py b/deploy/robot_ws/install/_local_setup_util_ps1.py new file mode 100644 index 0000000..83abe63 --- /dev/null +++ b/deploy/robot_ws/install/_local_setup_util_ps1.py @@ -0,0 +1,407 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"' +FORMAT_STR_USE_ENV_VAR = '$env:{name}' +FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"' +FORMAT_STR_REMOVE_LEADING_SEPARATOR = '' +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = '' + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + # skip over comments + if line.startswith('#'): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/deploy/robot_ws/install/_local_setup_util_sh.py b/deploy/robot_ws/install/_local_setup_util_sh.py new file mode 100644 index 0000000..ff31198 --- /dev/null +++ b/deploy/robot_ws/install/_local_setup_util_sh.py @@ -0,0 +1,407 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"' +FORMAT_STR_USE_ENV_VAR = '${name}' +FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"' +FORMAT_STR_REMOVE_LEADING_SEPARATOR = 'if [ "$(echo -n ${name} | head -c 1)" = ":" ]; then export {name}=${{{name}#?}} ; fi' +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi' + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + # skip over comments + if line.startswith('#'): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/deploy/robot_ws/install/go2py_node/lib/go2py_node/bridge b/deploy/robot_ws/install/go2py_node/lib/go2py_node/bridge new file mode 100755 index 0000000000000000000000000000000000000000..71d6ee2b0fa1823ebe83bd40ed753a605dec3dda GIT binary patch literal 4359944 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 z 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�sGfO7AhH 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 rIyJm^%i#Q?A<9 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

g+CcAf3Uw>(?j(0||5#~vXj|x``P`bqcBheh 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

p*Yu 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�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 z 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 z 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%0DX!Y9BK*(Cu0C$%siwA&@)!;}UO~_NY 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 literal 0 HcmV?d00001 diff --git a/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/package_run_dependencies/go2py_node b/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/package_run_dependencies/go2py_node new file mode 100644 index 0000000..ce14ac7 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/package_run_dependencies/go2py_node @@ -0,0 +1 @@ +unitree_go;unitree_api;rclcpp;std_msgs;rosbag2_cpp;ament_lint_auto;ament_lint_common \ No newline at end of file diff --git a/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/packages/go2py_node b/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/packages/go2py_node new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/parent_prefix_path/go2py_node b/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/parent_prefix_path/go2py_node new file mode 100644 index 0000000..e053138 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/ament_index/resource_index/parent_prefix_path/go2py_node @@ -0,0 +1 @@ +/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/go2py_node:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_go:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_api:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/hesai_ros_driver:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/unitree_go:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/unitree_api:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/rmw_cyclonedds_cpp:/opt/ros/foxy \ No newline at end of file diff --git a/deploy/robot_ws/install/go2py_node/share/colcon-core/packages/go2py_node b/deploy/robot_ws/install/go2py_node/share/colcon-core/packages/go2py_node new file mode 100644 index 0000000..006e304 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/colcon-core/packages/go2py_node @@ -0,0 +1 @@ +rclcpp:rosbag2_cpp:std_msgs:unitree_api:unitree_go \ No newline at end of file diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig-version.cmake b/deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig-version.cmake new file mode 100644 index 0000000..7beb732 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig-version.cmake @@ -0,0 +1,14 @@ +# generated from ament/cmake/core/templates/nameConfig-version.cmake.in +set(PACKAGE_VERSION "0.0.0") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig.cmake b/deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig.cmake new file mode 100644 index 0000000..bbfd2f5 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/cmake/go2py_nodeConfig.cmake @@ -0,0 +1,42 @@ +# generated from ament/cmake/core/templates/nameConfig.cmake.in + +# prevent multiple inclusion +if(_go2py_node_CONFIG_INCLUDED) + # ensure to keep the found flag the same + if(NOT DEFINED go2py_node_FOUND) + # explicitly set it to FALSE, otherwise CMake will set it to TRUE + set(go2py_node_FOUND FALSE) + elseif(NOT go2py_node_FOUND) + # use separate condition to avoid uninitialized variable warning + set(go2py_node_FOUND FALSE) + endif() + return() +endif() +set(_go2py_node_CONFIG_INCLUDED TRUE) + +# output package information +if(NOT go2py_node_FIND_QUIETLY) + message(STATUS "Found go2py_node: 0.0.0 (${go2py_node_DIR})") +endif() + +# warn when using a deprecated package +if(NOT "" STREQUAL "") + set(_msg "Package 'go2py_node' is deprecated") + # append custom deprecation text if available + if(NOT "" STREQUAL "TRUE") + set(_msg "${_msg} ()") + endif() + # optionally quiet the deprecation message + if(NOT ${go2py_node_DEPRECATED_QUIET}) + message(DEPRECATION "${_msg}") + endif() +endif() + +# flag package as ament-based to distinguish it after being find_package()-ed +set(go2py_node_FOUND_AMENT_PACKAGE TRUE) + +# include all config extra files +set(_extras "") +foreach(_extra ${_extras}) + include("${go2py_node_DIR}/${_extra}") +endforeach() diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.dsv b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.dsv new file mode 100644 index 0000000..79d4c95 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;AMENT_PREFIX_PATH; diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.sh b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.sh new file mode 100644 index 0000000..02e441b --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/ament_prefix_path.sh @@ -0,0 +1,4 @@ +# copied from +# ament_cmake_core/cmake/environment_hooks/environment/ament_prefix_path.sh + +ament_prepend_unique_value AMENT_PREFIX_PATH "$AMENT_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.dsv b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.dsv new file mode 100644 index 0000000..b94426a --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate-if-exists;PATH;bin diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.sh b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.sh new file mode 100644 index 0000000..e59b749 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/environment/path.sh @@ -0,0 +1,5 @@ +# copied from ament_cmake_core/cmake/environment_hooks/environment/path.sh + +if [ -d "$AMENT_CURRENT_PREFIX/bin" ]; then + ament_prepend_unique_value PATH "$AMENT_CURRENT_PREFIX/bin" +fi diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.dsv b/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.dsv new file mode 100644 index 0000000..e119f32 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;CMAKE_PREFIX_PATH; diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.ps1 b/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.ps1 new file mode 100644 index 0000000..d03facc --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.sh b/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.sh new file mode 100644 index 0000000..a948e68 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/hook/cmake_prefix_path.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.bash b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.bash new file mode 100644 index 0000000..49782f2 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.bash @@ -0,0 +1,46 @@ +# generated from ament_package/template/package_level/local_setup.bash.in + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.dsv b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.dsv new file mode 100644 index 0000000..aaca281 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.dsv @@ -0,0 +1,2 @@ +source;share/go2py_node/environment/ament_prefix_path.sh +source;share/go2py_node/environment/path.sh diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.sh b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.sh new file mode 100644 index 0000000..12d43c3 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.sh @@ -0,0 +1,133 @@ +# generated from ament_package/template/package_level/local_setup.sh.in + +# since this file is sourced use either the provided AMENT_CURRENT_PREFIX +# or fall back to the destination set at configure time +: ${AMENT_CURRENT_PREFIX:="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/go2py_node"} +if [ ! -d "$AMENT_CURRENT_PREFIX" ]; then + if [ -z "$COLCON_CURRENT_PREFIX" ]; then + echo "The compile time prefix path '$AMENT_CURRENT_PREFIX' doesn't " \ + "exist. Consider sourcing a different extension than '.sh'." 1>&2 + else + AMENT_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" + fi +fi + +# function to append values to environment variables +# using colons as separators and avoiding leading separators +ament_append_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # avoid leading separator + eval _values=\"\$$_listname\" + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + _ament_append_value_IFS=$IFS + unset IFS + eval export $_listname=\"\$$_listname:$_value\" + #eval echo "append list \$$_listname" + IFS=$_ament_append_value_IFS + unset _ament_append_value_IFS + fi + unset _values + + unset _value + unset _listname +} + +# function to prepend non-duplicate values to environment variables +# using colons as separators and avoiding trailing separators +ament_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # check if the list contains the value + eval _values=\"\$$_listname\" + _duplicate= + _ament_prepend_unique_value_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array _values + fi + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + if [ "$_item" = "$_value" ]; then + _duplicate=1 + fi + done + unset _item + + # prepend only non-duplicates + if [ -z "$_duplicate" ]; then + # avoid trailing separator + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + unset IFS + eval export $_listname=\"$_value:\$$_listname\" + #eval echo "prepend list \$$_listname" + fi + fi + IFS=$_ament_prepend_unique_value_IFS + unset _ament_prepend_unique_value_IFS + unset _duplicate + unset _values + + unset _value + unset _listname +} + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# list all environment hooks of this package +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/go2py_node/environment/ament_prefix_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/go2py_node/environment/path.sh" + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array AMENT_ENVIRONMENT_HOOKS + fi + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + if [ -f "$_hook" ]; then + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + # trace output + if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_hook\"" + fi + . "$_hook" + fi + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +# reset AMENT_CURRENT_PREFIX after each package +# allowing to source multiple package-level setup files +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.zsh b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.zsh new file mode 100644 index 0000000..fe161be --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/local_setup.zsh @@ -0,0 +1,59 @@ +# generated from ament_package/template/package_level/local_setup.zsh.in + +AMENT_SHELL=zsh + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# function to convert array-like strings into arrays +# to wordaround SH_WORD_SPLIT not being set +ament_zsh_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +# the package-level local_setup file unsets AMENT_CURRENT_PREFIX +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/package.bash b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.bash new file mode 100644 index 0000000..a6bf720 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.bash @@ -0,0 +1,39 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/go2py_node/package.sh" + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" + +# source bash hooks +_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/go2py_node/local_setup.bash" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/package.dsv b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.dsv new file mode 100644 index 0000000..2a99b11 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.dsv @@ -0,0 +1,8 @@ +source;share/go2py_node/hook/cmake_prefix_path.ps1 +source;share/go2py_node/hook/cmake_prefix_path.dsv +source;share/go2py_node/hook/cmake_prefix_path.sh +source;share/go2py_node/local_setup.bash +source;share/go2py_node/local_setup.dsv +source;share/go2py_node/local_setup.ps1 +source;share/go2py_node/local_setup.sh +source;share/go2py_node/local_setup.zsh diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/package.ps1 b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.ps1 new file mode 100644 index 0000000..5b7f9fc --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.ps1 @@ -0,0 +1,116 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to append a value to a variable +# which uses colons as separators +# duplicates as well as leading separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_append_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + $_duplicate="" + # start with no values + $_all_values="" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -eq $_value) { + $_duplicate="1" + } + if ($_all_values) { + $_all_values="${_all_values};$_" + } else { + $_all_values="$_" + } + } + } + } + # append only non-duplicates + if (!$_duplicate) { + # avoid leading separator + if ($_all_values) { + $_all_values="${_all_values};${_value}" + } else { + $_all_values="${_value}" + } + } + + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/go2py_node/hook/cmake_prefix_path.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/go2py_node/local_setup.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/package.sh b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.sh new file mode 100644 index 0000000..eb4eb87 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.sh @@ -0,0 +1,87 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/go2py_node" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/go2py_node/hook/cmake_prefix_path.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/go2py_node/local_setup.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/package.xml b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.xml new file mode 100644 index 0000000..edb456d --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.xml @@ -0,0 +1,24 @@ + + + + go2py_node + 0.0.0 + TODO: Package description + zeen + TODO: License declaration + + ament_cmake + + unitree_go + unitree_api + rclcpp + std_msgs + rosbag2_cpp + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/deploy/robot_ws/install/go2py_node/share/go2py_node/package.zsh b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.zsh new file mode 100644 index 0000000..650d599 --- /dev/null +++ b/deploy/robot_ws/install/go2py_node/share/go2py_node/package.zsh @@ -0,0 +1,50 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/go2py_node/package.sh" +unset convert_zsh_to_array + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" + +# source zsh hooks +_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/go2py_node/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/local_setup.bash b/deploy/robot_ws/install/local_setup.bash new file mode 100644 index 0000000..03f0025 --- /dev/null +++ b/deploy/robot_ws/install/local_setup.bash @@ -0,0 +1,121 @@ +# generated from colcon_bash/shell/template/prefix.bash.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +else + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_bash_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_bash_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_bash_prepend_unique_value_IFS" + unset _colcon_prefix_bash_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_bash_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "$(declare -f _colcon_prefix_sh_source_script)" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/local_setup.ps1 b/deploy/robot_ws/install/local_setup.ps1 new file mode 100644 index 0000000..6f68c8d --- /dev/null +++ b/deploy/robot_ws/install/local_setup.ps1 @@ -0,0 +1,55 @@ +# generated from colcon_powershell/shell/template/prefix.ps1.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# check environment variable for custom Python executable +if ($env:COLCON_PYTHON_EXECUTABLE) { + if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) { + echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist" + exit 1 + } + $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE" +} else { + # use the Python executable known at configure time + $_colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) { + if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) { + echo "error: unable to find python3 executable" + exit 1 + } + $_colcon_python_executable="python3" + } +} + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_powershell_source_script { + param ( + $_colcon_prefix_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_powershell_source_script_param'" + } + . "$_colcon_prefix_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'" + } +} + +# get all commands in topological order +$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1 + +# execute all commands in topological order +if ($env:COLCON_TRACE) { + echo "Execute generated script:" + echo "<<<" + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output + echo ">>>" +} +if ($_colcon_ordered_commands) { + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression +} diff --git a/deploy/robot_ws/install/local_setup.sh b/deploy/robot_ws/install/local_setup.sh new file mode 100644 index 0000000..9345c15 --- /dev/null +++ b/deploy/robot_ws/install/local_setup.sh @@ -0,0 +1,137 @@ +# generated from colcon_core/shell/template/prefix.sh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX + return 1 + fi +else + _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_sh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_sh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_sh_prepend_unique_value_IFS" + unset _colcon_prefix_sh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_sh_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "_colcon_prefix_sh_source_script() { + if [ -f \"\$1\" ]; then + if [ -n \"\$COLCON_TRACE\" ]; then + echo \"# . \\\"\$1\\\"\" + fi + . \"\$1\" + else + echo \"not found: \\\"\$1\\\"\" 1>&2 + fi + }" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/local_setup.zsh b/deploy/robot_ws/install/local_setup.zsh new file mode 100644 index 0000000..b648710 --- /dev/null +++ b/deploy/robot_ws/install/local_setup.zsh @@ -0,0 +1,134 @@ +# generated from colcon_zsh/shell/template/prefix.zsh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +else + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +_colcon_prefix_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_zsh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # workaround SH_WORD_SPLIT not being set + _colcon_prefix_zsh_convert_to_array _values + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS" + unset _colcon_prefix_zsh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_zsh_prepend_unique_value +unset _colcon_prefix_zsh_convert_to_array + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "$(declare -f _colcon_prefix_sh_source_script)" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/setup.bash b/deploy/robot_ws/install/setup.bash new file mode 100644 index 0000000..a687872 --- /dev/null +++ b/deploy/robot_ws/install/setup.bash @@ -0,0 +1,34 @@ +# generated from colcon_bash/shell/template/prefix_chain.bash.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/foxy" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_bash_source_script diff --git a/deploy/robot_ws/install/setup.ps1 b/deploy/robot_ws/install/setup.ps1 new file mode 100644 index 0000000..a2b9119 --- /dev/null +++ b/deploy/robot_ws/install/setup.ps1 @@ -0,0 +1,30 @@ +# generated from colcon_powershell/shell/template/prefix_chain.ps1.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_chain_powershell_source_script { + param ( + $_colcon_prefix_chain_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_chain_powershell_source_script_param'" + } + . "$_colcon_prefix_chain_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'" + } +} + +# source chained prefixes +_colcon_prefix_chain_powershell_source_script "/opt/ros/foxy\local_setup.ps1" +_colcon_prefix_chain_powershell_source_script "/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install\local_setup.ps1" + +# source this prefix +$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent) +_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX\local_setup.ps1" diff --git a/deploy/robot_ws/install/setup.sh b/deploy/robot_ws/install/setup.sh new file mode 100644 index 0000000..2a294d5 --- /dev/null +++ b/deploy/robot_ws/install/setup.sh @@ -0,0 +1,49 @@ +# generated from colcon_core/shell/template/prefix_chain.sh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install +if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX + return 1 +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/foxy" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_sh_source_script +unset COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/setup.zsh b/deploy/robot_ws/install/setup.zsh new file mode 100644 index 0000000..de47bbf --- /dev/null +++ b/deploy/robot_ws/install/setup.zsh @@ -0,0 +1,34 @@ +# generated from colcon_zsh/shell/template/prefix_chain.zsh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/foxy" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_zsh_source_script diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__builder.hpp new file mode 100644 index 0000000..b41c8e6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__builder.hpp @@ -0,0 +1,87 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST__BUILDER_HPP_ + +#include "unitree_api/msg/detail/request__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Request_binary +{ +public: + explicit Init_Request_binary(::unitree_api::msg::Request & msg) + : msg_(msg) + {} + ::unitree_api::msg::Request binary(::unitree_api::msg::Request::_binary_type arg) + { + msg_.binary = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::Request msg_; +}; + +class Init_Request_parameter +{ +public: + explicit Init_Request_parameter(::unitree_api::msg::Request & msg) + : msg_(msg) + {} + Init_Request_binary parameter(::unitree_api::msg::Request::_parameter_type arg) + { + msg_.parameter = std::move(arg); + return Init_Request_binary(msg_); + } + +private: + ::unitree_api::msg::Request msg_; +}; + +class Init_Request_header +{ +public: + Init_Request_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Request_parameter header(::unitree_api::msg::Request::_header_type arg) + { + msg_.header = std::move(arg); + return Init_Request_parameter(msg_); + } + +private: + ::unitree_api::msg::Request msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::Request>() +{ + return unitree_api::msg::builder::Init_Request_header(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.c new file mode 100644 index 0000000..a815295 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.c @@ -0,0 +1,288 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/request__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `header` +#include "unitree_api/msg/detail/request_header__functions.h" +// Member `parameter` +#include "rosidl_runtime_c/string_functions.h" +// Member `binary` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool +unitree_api__msg__Request__init(unitree_api__msg__Request * msg) +{ + if (!msg) { + return false; + } + // header + if (!unitree_api__msg__RequestHeader__init(&msg->header)) { + unitree_api__msg__Request__fini(msg); + return false; + } + // parameter + if (!rosidl_runtime_c__String__init(&msg->parameter)) { + unitree_api__msg__Request__fini(msg); + return false; + } + // binary + if (!rosidl_runtime_c__uint8__Sequence__init(&msg->binary, 0)) { + unitree_api__msg__Request__fini(msg); + return false; + } + return true; +} + +void +unitree_api__msg__Request__fini(unitree_api__msg__Request * msg) +{ + if (!msg) { + return; + } + // header + unitree_api__msg__RequestHeader__fini(&msg->header); + // parameter + rosidl_runtime_c__String__fini(&msg->parameter); + // binary + rosidl_runtime_c__uint8__Sequence__fini(&msg->binary); +} + +bool +unitree_api__msg__Request__are_equal(const unitree_api__msg__Request * lhs, const unitree_api__msg__Request * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // header + if (!unitree_api__msg__RequestHeader__are_equal( + &(lhs->header), &(rhs->header))) + { + return false; + } + // parameter + if (!rosidl_runtime_c__String__are_equal( + &(lhs->parameter), &(rhs->parameter))) + { + return false; + } + // binary + if (!rosidl_runtime_c__uint8__Sequence__are_equal( + &(lhs->binary), &(rhs->binary))) + { + return false; + } + return true; +} + +bool +unitree_api__msg__Request__copy( + const unitree_api__msg__Request * input, + unitree_api__msg__Request * output) +{ + if (!input || !output) { + return false; + } + // header + if (!unitree_api__msg__RequestHeader__copy( + &(input->header), &(output->header))) + { + return false; + } + // parameter + if (!rosidl_runtime_c__String__copy( + &(input->parameter), &(output->parameter))) + { + return false; + } + // binary + if (!rosidl_runtime_c__uint8__Sequence__copy( + &(input->binary), &(output->binary))) + { + return false; + } + return true; +} + +unitree_api__msg__Request * +unitree_api__msg__Request__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__Request * msg = (unitree_api__msg__Request *)allocator.allocate(sizeof(unitree_api__msg__Request), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__Request)); + bool success = unitree_api__msg__Request__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__Request__destroy(unitree_api__msg__Request * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__Request__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__Request__Sequence__init(unitree_api__msg__Request__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__Request * data = NULL; + + if (size) { + data = (unitree_api__msg__Request *)allocator.zero_allocate(size, sizeof(unitree_api__msg__Request), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__Request__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__Request__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__Request__Sequence__fini(unitree_api__msg__Request__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__Request__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__Request__Sequence * +unitree_api__msg__Request__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__Request__Sequence * array = (unitree_api__msg__Request__Sequence *)allocator.allocate(sizeof(unitree_api__msg__Request__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__Request__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__Request__Sequence__destroy(unitree_api__msg__Request__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__Request__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__Request__Sequence__are_equal(const unitree_api__msg__Request__Sequence * lhs, const unitree_api__msg__Request__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__Request__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__Request__Sequence__copy( + const unitree_api__msg__Request__Sequence * input, + unitree_api__msg__Request__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__Request); + unitree_api__msg__Request * data = + (unitree_api__msg__Request *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__Request__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__Request__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__Request__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.h new file mode 100644 index 0000000..fd22ad0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/request__struct.h" + +/// Initialize msg/Request message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__Request + * )) before or use + * unitree_api__msg__Request__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Request__init(unitree_api__msg__Request * msg); + +/// Finalize msg/Request message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Request__fini(unitree_api__msg__Request * msg); + +/// Create msg/Request message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__Request__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__Request * +unitree_api__msg__Request__create(); + +/// Destroy msg/Request message. +/** + * It calls + * unitree_api__msg__Request__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Request__destroy(unitree_api__msg__Request * msg); + +/// Check for msg/Request message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Request__are_equal(const unitree_api__msg__Request * lhs, const unitree_api__msg__Request * rhs); + +/// Copy a msg/Request message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Request__copy( + const unitree_api__msg__Request * input, + unitree_api__msg__Request * output); + +/// Initialize array of msg/Request messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__Request__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Request__Sequence__init(unitree_api__msg__Request__Sequence * array, size_t size); + +/// Finalize array of msg/Request messages. +/** + * It calls + * unitree_api__msg__Request__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Request__Sequence__fini(unitree_api__msg__Request__Sequence * array); + +/// Create array of msg/Request messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__Request__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__Request__Sequence * +unitree_api__msg__Request__Sequence__create(size_t size); + +/// Destroy array of msg/Request messages. +/** + * It calls + * unitree_api__msg__Request__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Request__Sequence__destroy(unitree_api__msg__Request__Sequence * array); + +/// Check for msg/Request message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Request__Sequence__are_equal(const unitree_api__msg__Request__Sequence * lhs, const unitree_api__msg__Request__Sequence * rhs); + +/// Copy an array of msg/Request messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Request__Sequence__copy( + const unitree_api__msg__Request__Sequence * input, + unitree_api__msg__Request__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..4765adc --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__Request( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__Request( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, Request)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..1796b89 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/request__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::Request & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::Request & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::Request & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_Request( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, Request)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..084587c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, Request)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..a880f48 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, Request)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.h new file mode 100644 index 0000000..5325d3e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.h @@ -0,0 +1,50 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "unitree_api/msg/detail/request_header__struct.h" +// Member 'parameter' +#include "rosidl_runtime_c/string.h" +// Member 'binary' +#include "rosidl_runtime_c/primitives_sequence.h" + +// Struct defined in msg/Request in the package unitree_api. +typedef struct unitree_api__msg__Request +{ + unitree_api__msg__RequestHeader header; + rosidl_runtime_c__String parameter; + rosidl_runtime_c__uint8__Sequence binary; +} unitree_api__msg__Request; + +// Struct for a sequence of unitree_api__msg__Request. +typedef struct unitree_api__msg__Request__Sequence +{ + unitree_api__msg__Request * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__Request__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.hpp new file mode 100644 index 0000000..d6ca5ea --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__struct.hpp @@ -0,0 +1,160 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "unitree_api/msg/detail/request_header__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__Request __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__Request __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct Request_ +{ + using Type = Request_; + + explicit Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->parameter = ""; + } + } + + explicit Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init), + parameter(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->parameter = ""; + } + } + + // field types and members + using _header_type = + unitree_api::msg::RequestHeader_; + _header_type header; + using _parameter_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _parameter_type parameter; + using _binary_type = + std::vector::other>; + _binary_type binary; + + // setters for named parameter idiom + Type & set__header( + const unitree_api::msg::RequestHeader_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__parameter( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->parameter = _arg; + return *this; + } + Type & set__binary( + const std::vector::other> & _arg) + { + this->binary = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::Request_ *; + using ConstRawPtr = + const unitree_api::msg::Request_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__Request + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__Request + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Request_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->parameter != other.parameter) { + return false; + } + if (this->binary != other.binary) { + return false; + } + return true; + } + bool operator!=(const Request_ & other) const + { + return !this->operator==(other); + } +}; // struct Request_ + +// alias to use template instance with default allocator +using Request = + unitree_api::msg::Request_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__traits.hpp new file mode 100644 index 0000000..205fa6f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST__TRAITS_HPP_ + +#include "unitree_api/msg/detail/request__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "unitree_api/msg/detail/request_header__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::Request"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/Request"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.c new file mode 100644 index 0000000..9e0cfdf --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.c @@ -0,0 +1,123 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/request__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/request__functions.h" +#include "unitree_api/msg/detail/request__struct.h" + + +// Include directives for member types +// Member `header` +#include "unitree_api/msg/request_header.h" +// Member `header` +#include "unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_c.h" +// Member `parameter` +#include "rosidl_runtime_c/string_functions.h" +// Member `binary` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Request__rosidl_typesupport_introspection_c__Request_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__Request__init(message_memory); +} + +void Request__rosidl_typesupport_introspection_c__Request_fini_function(void * message_memory) +{ + unitree_api__msg__Request__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Request__rosidl_typesupport_introspection_c__Request_message_member_array[3] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__Request, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "parameter", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__Request, parameter), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "binary", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__Request, binary), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Request__rosidl_typesupport_introspection_c__Request_message_members = { + "unitree_api__msg", // message namespace + "Request", // message name + 3, // number of fields + sizeof(unitree_api__msg__Request), + Request__rosidl_typesupport_introspection_c__Request_message_member_array, // message members + Request__rosidl_typesupport_introspection_c__Request_init_function, // function to initialize message memory (memory has to be allocated) + Request__rosidl_typesupport_introspection_c__Request_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Request__rosidl_typesupport_introspection_c__Request_message_type_support_handle = { + 0, + &Request__rosidl_typesupport_introspection_c__Request_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, Request)() { + Request__rosidl_typesupport_introspection_c__Request_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestHeader)(); + if (!Request__rosidl_typesupport_introspection_c__Request_message_type_support_handle.typesupport_identifier) { + Request__rosidl_typesupport_introspection_c__Request_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Request__rosidl_typesupport_introspection_c__Request_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.cpp new file mode 100644 index 0000000..fb8fc8c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.cpp @@ -0,0 +1,164 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/request__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Request_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::Request(_init); +} + +void Request_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Request(); +} + +size_t size_function__Request__binary(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__Request__binary(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__Request__binary(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__Request__binary(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Request_message_member_array[3] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::Request, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "parameter", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::Request, parameter), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "binary", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::Request, binary), // bytes offset in struct + nullptr, // default value + size_function__Request__binary, // size() function pointer + get_const_function__Request__binary, // get_const(index) function pointer + get_function__Request__binary, // get(index) function pointer + resize_function__Request__binary // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Request_message_members = { + "unitree_api::msg", // message namespace + "Request", // message name + 3, // number of fields + sizeof(unitree_api::msg::Request), + Request_message_member_array, // message members + Request_init_function, // function to initialize message memory (memory has to be allocated) + Request_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Request_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Request_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::Request_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, Request)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::Request_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.h new file mode 100644 index 0000000..d662fff --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + Request +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.hpp new file mode 100644 index 0000000..02a5188 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + Request +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__builder.hpp new file mode 100644 index 0000000..193c4b0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__builder.hpp @@ -0,0 +1,87 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__BUILDER_HPP_ + +#include "unitree_api/msg/detail/request_header__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_RequestHeader_policy +{ +public: + explicit Init_RequestHeader_policy(::unitree_api::msg::RequestHeader & msg) + : msg_(msg) + {} + ::unitree_api::msg::RequestHeader policy(::unitree_api::msg::RequestHeader::_policy_type arg) + { + msg_.policy = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::RequestHeader msg_; +}; + +class Init_RequestHeader_lease +{ +public: + explicit Init_RequestHeader_lease(::unitree_api::msg::RequestHeader & msg) + : msg_(msg) + {} + Init_RequestHeader_policy lease(::unitree_api::msg::RequestHeader::_lease_type arg) + { + msg_.lease = std::move(arg); + return Init_RequestHeader_policy(msg_); + } + +private: + ::unitree_api::msg::RequestHeader msg_; +}; + +class Init_RequestHeader_identity +{ +public: + Init_RequestHeader_identity() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_RequestHeader_lease identity(::unitree_api::msg::RequestHeader::_identity_type arg) + { + msg_.identity = std::move(arg); + return Init_RequestHeader_lease(msg_); + } + +private: + ::unitree_api::msg::RequestHeader msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::RequestHeader>() +{ + return unitree_api::msg::builder::Init_RequestHeader_identity(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.c new file mode 100644 index 0000000..8025f44 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.c @@ -0,0 +1,288 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/request_header__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `identity` +#include "unitree_api/msg/detail/request_identity__functions.h" +// Member `lease` +#include "unitree_api/msg/detail/request_lease__functions.h" +// Member `policy` +#include "unitree_api/msg/detail/request_policy__functions.h" + +bool +unitree_api__msg__RequestHeader__init(unitree_api__msg__RequestHeader * msg) +{ + if (!msg) { + return false; + } + // identity + if (!unitree_api__msg__RequestIdentity__init(&msg->identity)) { + unitree_api__msg__RequestHeader__fini(msg); + return false; + } + // lease + if (!unitree_api__msg__RequestLease__init(&msg->lease)) { + unitree_api__msg__RequestHeader__fini(msg); + return false; + } + // policy + if (!unitree_api__msg__RequestPolicy__init(&msg->policy)) { + unitree_api__msg__RequestHeader__fini(msg); + return false; + } + return true; +} + +void +unitree_api__msg__RequestHeader__fini(unitree_api__msg__RequestHeader * msg) +{ + if (!msg) { + return; + } + // identity + unitree_api__msg__RequestIdentity__fini(&msg->identity); + // lease + unitree_api__msg__RequestLease__fini(&msg->lease); + // policy + unitree_api__msg__RequestPolicy__fini(&msg->policy); +} + +bool +unitree_api__msg__RequestHeader__are_equal(const unitree_api__msg__RequestHeader * lhs, const unitree_api__msg__RequestHeader * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // identity + if (!unitree_api__msg__RequestIdentity__are_equal( + &(lhs->identity), &(rhs->identity))) + { + return false; + } + // lease + if (!unitree_api__msg__RequestLease__are_equal( + &(lhs->lease), &(rhs->lease))) + { + return false; + } + // policy + if (!unitree_api__msg__RequestPolicy__are_equal( + &(lhs->policy), &(rhs->policy))) + { + return false; + } + return true; +} + +bool +unitree_api__msg__RequestHeader__copy( + const unitree_api__msg__RequestHeader * input, + unitree_api__msg__RequestHeader * output) +{ + if (!input || !output) { + return false; + } + // identity + if (!unitree_api__msg__RequestIdentity__copy( + &(input->identity), &(output->identity))) + { + return false; + } + // lease + if (!unitree_api__msg__RequestLease__copy( + &(input->lease), &(output->lease))) + { + return false; + } + // policy + if (!unitree_api__msg__RequestPolicy__copy( + &(input->policy), &(output->policy))) + { + return false; + } + return true; +} + +unitree_api__msg__RequestHeader * +unitree_api__msg__RequestHeader__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestHeader * msg = (unitree_api__msg__RequestHeader *)allocator.allocate(sizeof(unitree_api__msg__RequestHeader), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__RequestHeader)); + bool success = unitree_api__msg__RequestHeader__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__RequestHeader__destroy(unitree_api__msg__RequestHeader * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__RequestHeader__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__RequestHeader__Sequence__init(unitree_api__msg__RequestHeader__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestHeader * data = NULL; + + if (size) { + data = (unitree_api__msg__RequestHeader *)allocator.zero_allocate(size, sizeof(unitree_api__msg__RequestHeader), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__RequestHeader__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__RequestHeader__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__RequestHeader__Sequence__fini(unitree_api__msg__RequestHeader__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__RequestHeader__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__RequestHeader__Sequence * +unitree_api__msg__RequestHeader__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestHeader__Sequence * array = (unitree_api__msg__RequestHeader__Sequence *)allocator.allocate(sizeof(unitree_api__msg__RequestHeader__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__RequestHeader__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__RequestHeader__Sequence__destroy(unitree_api__msg__RequestHeader__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__RequestHeader__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__RequestHeader__Sequence__are_equal(const unitree_api__msg__RequestHeader__Sequence * lhs, const unitree_api__msg__RequestHeader__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__RequestHeader__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__RequestHeader__Sequence__copy( + const unitree_api__msg__RequestHeader__Sequence * input, + unitree_api__msg__RequestHeader__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__RequestHeader); + unitree_api__msg__RequestHeader * data = + (unitree_api__msg__RequestHeader *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__RequestHeader__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__RequestHeader__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__RequestHeader__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.h new file mode 100644 index 0000000..1c6c6b8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/request_header__struct.h" + +/// Initialize msg/RequestHeader message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__RequestHeader + * )) before or use + * unitree_api__msg__RequestHeader__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestHeader__init(unitree_api__msg__RequestHeader * msg); + +/// Finalize msg/RequestHeader message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestHeader__fini(unitree_api__msg__RequestHeader * msg); + +/// Create msg/RequestHeader message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__RequestHeader__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestHeader * +unitree_api__msg__RequestHeader__create(); + +/// Destroy msg/RequestHeader message. +/** + * It calls + * unitree_api__msg__RequestHeader__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestHeader__destroy(unitree_api__msg__RequestHeader * msg); + +/// Check for msg/RequestHeader message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestHeader__are_equal(const unitree_api__msg__RequestHeader * lhs, const unitree_api__msg__RequestHeader * rhs); + +/// Copy a msg/RequestHeader message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestHeader__copy( + const unitree_api__msg__RequestHeader * input, + unitree_api__msg__RequestHeader * output); + +/// Initialize array of msg/RequestHeader messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__RequestHeader__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestHeader__Sequence__init(unitree_api__msg__RequestHeader__Sequence * array, size_t size); + +/// Finalize array of msg/RequestHeader messages. +/** + * It calls + * unitree_api__msg__RequestHeader__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestHeader__Sequence__fini(unitree_api__msg__RequestHeader__Sequence * array); + +/// Create array of msg/RequestHeader messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__RequestHeader__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestHeader__Sequence * +unitree_api__msg__RequestHeader__Sequence__create(size_t size); + +/// Destroy array of msg/RequestHeader messages. +/** + * It calls + * unitree_api__msg__RequestHeader__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestHeader__Sequence__destroy(unitree_api__msg__RequestHeader__Sequence * array); + +/// Check for msg/RequestHeader message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestHeader__Sequence__are_equal(const unitree_api__msg__RequestHeader__Sequence * lhs, const unitree_api__msg__RequestHeader__Sequence * rhs); + +/// Copy an array of msg/RequestHeader messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestHeader__Sequence__copy( + const unitree_api__msg__RequestHeader__Sequence * input, + unitree_api__msg__RequestHeader__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..ad8b061 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__RequestHeader( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__RequestHeader( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, RequestHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..2da1080 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/request_header__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::RequestHeader & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::RequestHeader & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::RequestHeader & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_RequestHeader( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, RequestHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..4ced6ee --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..050bc93 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.h new file mode 100644 index 0000000..974ea38 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.h @@ -0,0 +1,50 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'identity' +#include "unitree_api/msg/detail/request_identity__struct.h" +// Member 'lease' +#include "unitree_api/msg/detail/request_lease__struct.h" +// Member 'policy' +#include "unitree_api/msg/detail/request_policy__struct.h" + +// Struct defined in msg/RequestHeader in the package unitree_api. +typedef struct unitree_api__msg__RequestHeader +{ + unitree_api__msg__RequestIdentity identity; + unitree_api__msg__RequestLease lease; + unitree_api__msg__RequestPolicy policy; +} unitree_api__msg__RequestHeader; + +// Struct for a sequence of unitree_api__msg__RequestHeader. +typedef struct unitree_api__msg__RequestHeader__Sequence +{ + unitree_api__msg__RequestHeader * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__RequestHeader__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.hpp new file mode 100644 index 0000000..13ed133 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__struct.hpp @@ -0,0 +1,159 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'identity' +#include "unitree_api/msg/detail/request_identity__struct.hpp" +// Member 'lease' +#include "unitree_api/msg/detail/request_lease__struct.hpp" +// Member 'policy' +#include "unitree_api/msg/detail/request_policy__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__RequestHeader __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__RequestHeader __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct RequestHeader_ +{ + using Type = RequestHeader_; + + explicit RequestHeader_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : identity(_init), + lease(_init), + policy(_init) + { + (void)_init; + } + + explicit RequestHeader_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : identity(_alloc, _init), + lease(_alloc, _init), + policy(_alloc, _init) + { + (void)_init; + } + + // field types and members + using _identity_type = + unitree_api::msg::RequestIdentity_; + _identity_type identity; + using _lease_type = + unitree_api::msg::RequestLease_; + _lease_type lease; + using _policy_type = + unitree_api::msg::RequestPolicy_; + _policy_type policy; + + // setters for named parameter idiom + Type & set__identity( + const unitree_api::msg::RequestIdentity_ & _arg) + { + this->identity = _arg; + return *this; + } + Type & set__lease( + const unitree_api::msg::RequestLease_ & _arg) + { + this->lease = _arg; + return *this; + } + Type & set__policy( + const unitree_api::msg::RequestPolicy_ & _arg) + { + this->policy = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::RequestHeader_ *; + using ConstRawPtr = + const unitree_api::msg::RequestHeader_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__RequestHeader + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__RequestHeader + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const RequestHeader_ & other) const + { + if (this->identity != other.identity) { + return false; + } + if (this->lease != other.lease) { + return false; + } + if (this->policy != other.policy) { + return false; + } + return true; + } + bool operator!=(const RequestHeader_ & other) const + { + return !this->operator==(other); + } +}; // struct RequestHeader_ + +// alias to use template instance with default allocator +using RequestHeader = + unitree_api::msg::RequestHeader_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__traits.hpp new file mode 100644 index 0000000..32a9b1f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__traits.hpp @@ -0,0 +1,50 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TRAITS_HPP_ + +#include "unitree_api/msg/detail/request_header__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'identity' +#include "unitree_api/msg/detail/request_identity__traits.hpp" +// Member 'lease' +#include "unitree_api/msg/detail/request_lease__traits.hpp" +// Member 'policy' +#include "unitree_api/msg/detail/request_policy__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::RequestHeader"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/RequestHeader"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.c new file mode 100644 index 0000000..2181cd3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.c @@ -0,0 +1,131 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/request_header__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/request_header__functions.h" +#include "unitree_api/msg/detail/request_header__struct.h" + + +// Include directives for member types +// Member `identity` +#include "unitree_api/msg/request_identity.h" +// Member `identity` +#include "unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h" +// Member `lease` +#include "unitree_api/msg/request_lease.h" +// Member `lease` +#include "unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_c.h" +// Member `policy` +#include "unitree_api/msg/request_policy.h" +// Member `policy` +#include "unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__RequestHeader__init(message_memory); +} + +void RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_fini_function(void * message_memory) +{ + unitree_api__msg__RequestHeader__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_member_array[3] = { + { + "identity", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestHeader, identity), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "lease", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestHeader, lease), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "policy", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestHeader, policy), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_members = { + "unitree_api__msg", // message namespace + "RequestHeader", // message name + 3, // number of fields + sizeof(unitree_api__msg__RequestHeader), + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_member_array, // message members + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_init_function, // function to initialize message memory (memory has to be allocated) + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_type_support_handle = { + 0, + &RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestHeader)() { + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestIdentity)(); + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_member_array[1].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestLease)(); + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_member_array[2].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestPolicy)(); + if (!RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_type_support_handle.typesupport_identifier) { + RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &RequestHeader__rosidl_typesupport_introspection_c__RequestHeader_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.cpp new file mode 100644 index 0000000..bca9335 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.cpp @@ -0,0 +1,137 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/request_header__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void RequestHeader_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::RequestHeader(_init); +} + +void RequestHeader_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~RequestHeader(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember RequestHeader_message_member_array[3] = { + { + "identity", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestHeader, identity), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "lease", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestHeader, lease), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "policy", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestHeader, policy), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers RequestHeader_message_members = { + "unitree_api::msg", // message namespace + "RequestHeader", // message name + 3, // number of fields + sizeof(unitree_api::msg::RequestHeader), + RequestHeader_message_member_array, // message members + RequestHeader_init_function, // function to initialize message memory (memory has to be allocated) + RequestHeader_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t RequestHeader_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &RequestHeader_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestHeader_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestHeader)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestHeader_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.h new file mode 100644 index 0000000..413960d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + RequestHeader +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.hpp new file mode 100644 index 0000000..1209f3a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_header__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + RequestHeader +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_HEADER__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__builder.hpp new file mode 100644 index 0000000..6b1652f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__BUILDER_HPP_ + +#include "unitree_api/msg/detail/request_identity__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_RequestIdentity_api_id +{ +public: + explicit Init_RequestIdentity_api_id(::unitree_api::msg::RequestIdentity & msg) + : msg_(msg) + {} + ::unitree_api::msg::RequestIdentity api_id(::unitree_api::msg::RequestIdentity::_api_id_type arg) + { + msg_.api_id = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::RequestIdentity msg_; +}; + +class Init_RequestIdentity_id +{ +public: + Init_RequestIdentity_id() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_RequestIdentity_api_id id(::unitree_api::msg::RequestIdentity::_id_type arg) + { + msg_.id = std::move(arg); + return Init_RequestIdentity_api_id(msg_); + } + +private: + ::unitree_api::msg::RequestIdentity msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::RequestIdentity>() +{ + return unitree_api::msg::builder::Init_RequestIdentity_id(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.c new file mode 100644 index 0000000..50b7ce6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.c @@ -0,0 +1,239 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/request_identity__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_api__msg__RequestIdentity__init(unitree_api__msg__RequestIdentity * msg) +{ + if (!msg) { + return false; + } + // id + // api_id + return true; +} + +void +unitree_api__msg__RequestIdentity__fini(unitree_api__msg__RequestIdentity * msg) +{ + if (!msg) { + return; + } + // id + // api_id +} + +bool +unitree_api__msg__RequestIdentity__are_equal(const unitree_api__msg__RequestIdentity * lhs, const unitree_api__msg__RequestIdentity * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // id + if (lhs->id != rhs->id) { + return false; + } + // api_id + if (lhs->api_id != rhs->api_id) { + return false; + } + return true; +} + +bool +unitree_api__msg__RequestIdentity__copy( + const unitree_api__msg__RequestIdentity * input, + unitree_api__msg__RequestIdentity * output) +{ + if (!input || !output) { + return false; + } + // id + output->id = input->id; + // api_id + output->api_id = input->api_id; + return true; +} + +unitree_api__msg__RequestIdentity * +unitree_api__msg__RequestIdentity__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestIdentity * msg = (unitree_api__msg__RequestIdentity *)allocator.allocate(sizeof(unitree_api__msg__RequestIdentity), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__RequestIdentity)); + bool success = unitree_api__msg__RequestIdentity__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__RequestIdentity__destroy(unitree_api__msg__RequestIdentity * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__RequestIdentity__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__RequestIdentity__Sequence__init(unitree_api__msg__RequestIdentity__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestIdentity * data = NULL; + + if (size) { + data = (unitree_api__msg__RequestIdentity *)allocator.zero_allocate(size, sizeof(unitree_api__msg__RequestIdentity), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__RequestIdentity__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__RequestIdentity__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__RequestIdentity__Sequence__fini(unitree_api__msg__RequestIdentity__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__RequestIdentity__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__RequestIdentity__Sequence * +unitree_api__msg__RequestIdentity__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestIdentity__Sequence * array = (unitree_api__msg__RequestIdentity__Sequence *)allocator.allocate(sizeof(unitree_api__msg__RequestIdentity__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__RequestIdentity__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__RequestIdentity__Sequence__destroy(unitree_api__msg__RequestIdentity__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__RequestIdentity__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__RequestIdentity__Sequence__are_equal(const unitree_api__msg__RequestIdentity__Sequence * lhs, const unitree_api__msg__RequestIdentity__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__RequestIdentity__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__RequestIdentity__Sequence__copy( + const unitree_api__msg__RequestIdentity__Sequence * input, + unitree_api__msg__RequestIdentity__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__RequestIdentity); + unitree_api__msg__RequestIdentity * data = + (unitree_api__msg__RequestIdentity *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__RequestIdentity__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__RequestIdentity__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__RequestIdentity__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.h new file mode 100644 index 0000000..fc84c7d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/request_identity__struct.h" + +/// Initialize msg/RequestIdentity message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__RequestIdentity + * )) before or use + * unitree_api__msg__RequestIdentity__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestIdentity__init(unitree_api__msg__RequestIdentity * msg); + +/// Finalize msg/RequestIdentity message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestIdentity__fini(unitree_api__msg__RequestIdentity * msg); + +/// Create msg/RequestIdentity message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__RequestIdentity__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestIdentity * +unitree_api__msg__RequestIdentity__create(); + +/// Destroy msg/RequestIdentity message. +/** + * It calls + * unitree_api__msg__RequestIdentity__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestIdentity__destroy(unitree_api__msg__RequestIdentity * msg); + +/// Check for msg/RequestIdentity message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestIdentity__are_equal(const unitree_api__msg__RequestIdentity * lhs, const unitree_api__msg__RequestIdentity * rhs); + +/// Copy a msg/RequestIdentity message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestIdentity__copy( + const unitree_api__msg__RequestIdentity * input, + unitree_api__msg__RequestIdentity * output); + +/// Initialize array of msg/RequestIdentity messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__RequestIdentity__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestIdentity__Sequence__init(unitree_api__msg__RequestIdentity__Sequence * array, size_t size); + +/// Finalize array of msg/RequestIdentity messages. +/** + * It calls + * unitree_api__msg__RequestIdentity__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestIdentity__Sequence__fini(unitree_api__msg__RequestIdentity__Sequence * array); + +/// Create array of msg/RequestIdentity messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__RequestIdentity__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestIdentity__Sequence * +unitree_api__msg__RequestIdentity__Sequence__create(size_t size); + +/// Destroy array of msg/RequestIdentity messages. +/** + * It calls + * unitree_api__msg__RequestIdentity__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestIdentity__Sequence__destroy(unitree_api__msg__RequestIdentity__Sequence * array); + +/// Check for msg/RequestIdentity message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestIdentity__Sequence__are_equal(const unitree_api__msg__RequestIdentity__Sequence * lhs, const unitree_api__msg__RequestIdentity__Sequence * rhs); + +/// Copy an array of msg/RequestIdentity messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestIdentity__Sequence__copy( + const unitree_api__msg__RequestIdentity__Sequence * input, + unitree_api__msg__RequestIdentity__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..dd273e9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__RequestIdentity( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__RequestIdentity( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, RequestIdentity)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..c33157f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/request_identity__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::RequestIdentity & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::RequestIdentity & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::RequestIdentity & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_RequestIdentity( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, RequestIdentity)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..40c528b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestIdentity)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..c997198 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestIdentity)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.h new file mode 100644 index 0000000..61cb375 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.h @@ -0,0 +1,41 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/RequestIdentity in the package unitree_api. +typedef struct unitree_api__msg__RequestIdentity +{ + int64_t id; + int64_t api_id; +} unitree_api__msg__RequestIdentity; + +// Struct for a sequence of unitree_api__msg__RequestIdentity. +typedef struct unitree_api__msg__RequestIdentity__Sequence +{ + unitree_api__msg__RequestIdentity * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__RequestIdentity__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.hpp new file mode 100644 index 0000000..b5d44ed --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__struct.hpp @@ -0,0 +1,144 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__RequestIdentity __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__RequestIdentity __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct RequestIdentity_ +{ + using Type = RequestIdentity_; + + explicit RequestIdentity_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->id = 0ll; + this->api_id = 0ll; + } + } + + explicit RequestIdentity_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->id = 0ll; + this->api_id = 0ll; + } + } + + // field types and members + using _id_type = + int64_t; + _id_type id; + using _api_id_type = + int64_t; + _api_id_type api_id; + + // setters for named parameter idiom + Type & set__id( + const int64_t & _arg) + { + this->id = _arg; + return *this; + } + Type & set__api_id( + const int64_t & _arg) + { + this->api_id = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::RequestIdentity_ *; + using ConstRawPtr = + const unitree_api::msg::RequestIdentity_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__RequestIdentity + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__RequestIdentity + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const RequestIdentity_ & other) const + { + if (this->id != other.id) { + return false; + } + if (this->api_id != other.api_id) { + return false; + } + return true; + } + bool operator!=(const RequestIdentity_ & other) const + { + return !this->operator==(other); + } +}; // struct RequestIdentity_ + +// alias to use template instance with default allocator +using RequestIdentity = + unitree_api::msg::RequestIdentity_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__traits.hpp new file mode 100644 index 0000000..67968dc --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TRAITS_HPP_ + +#include "unitree_api/msg/detail/request_identity__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::RequestIdentity"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/RequestIdentity"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.c new file mode 100644 index 0000000..e0863ab --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.c @@ -0,0 +1,96 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/request_identity__functions.h" +#include "unitree_api/msg/detail/request_identity__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__RequestIdentity__init(message_memory); +} + +void RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_fini_function(void * message_memory) +{ + unitree_api__msg__RequestIdentity__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_member_array[2] = { + { + "id", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT64, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestIdentity, id), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "api_id", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT64, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestIdentity, api_id), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_members = { + "unitree_api__msg", // message namespace + "RequestIdentity", // message name + 2, // number of fields + sizeof(unitree_api__msg__RequestIdentity), + RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_member_array, // message members + RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_init_function, // function to initialize message memory (memory has to be allocated) + RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_type_support_handle = { + 0, + &RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestIdentity)() { + if (!RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_type_support_handle.typesupport_identifier) { + RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &RequestIdentity__rosidl_typesupport_introspection_c__RequestIdentity_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.cpp new file mode 100644 index 0000000..4040655 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.cpp @@ -0,0 +1,122 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/request_identity__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void RequestIdentity_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::RequestIdentity(_init); +} + +void RequestIdentity_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~RequestIdentity(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember RequestIdentity_message_member_array[2] = { + { + "id", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT64, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestIdentity, id), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "api_id", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT64, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestIdentity, api_id), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers RequestIdentity_message_members = { + "unitree_api::msg", // message namespace + "RequestIdentity", // message name + 2, // number of fields + sizeof(unitree_api::msg::RequestIdentity), + RequestIdentity_message_member_array, // message members + RequestIdentity_init_function, // function to initialize message memory (memory has to be allocated) + RequestIdentity_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t RequestIdentity_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &RequestIdentity_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestIdentity_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestIdentity)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestIdentity_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.h new file mode 100644 index 0000000..1e0dae5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + RequestIdentity +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.hpp new file mode 100644 index 0000000..760a84e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_identity__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + RequestIdentity +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_IDENTITY__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__builder.hpp new file mode 100644 index 0000000..e1a77fc --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__builder.hpp @@ -0,0 +1,55 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__BUILDER_HPP_ + +#include "unitree_api/msg/detail/request_lease__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_RequestLease_id +{ +public: + Init_RequestLease_id() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::unitree_api::msg::RequestLease id(::unitree_api::msg::RequestLease::_id_type arg) + { + msg_.id = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::RequestLease msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::RequestLease>() +{ + return unitree_api::msg::builder::Init_RequestLease_id(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.c new file mode 100644 index 0000000..101bb8e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.c @@ -0,0 +1,231 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/request_lease__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_api__msg__RequestLease__init(unitree_api__msg__RequestLease * msg) +{ + if (!msg) { + return false; + } + // id + return true; +} + +void +unitree_api__msg__RequestLease__fini(unitree_api__msg__RequestLease * msg) +{ + if (!msg) { + return; + } + // id +} + +bool +unitree_api__msg__RequestLease__are_equal(const unitree_api__msg__RequestLease * lhs, const unitree_api__msg__RequestLease * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // id + if (lhs->id != rhs->id) { + return false; + } + return true; +} + +bool +unitree_api__msg__RequestLease__copy( + const unitree_api__msg__RequestLease * input, + unitree_api__msg__RequestLease * output) +{ + if (!input || !output) { + return false; + } + // id + output->id = input->id; + return true; +} + +unitree_api__msg__RequestLease * +unitree_api__msg__RequestLease__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestLease * msg = (unitree_api__msg__RequestLease *)allocator.allocate(sizeof(unitree_api__msg__RequestLease), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__RequestLease)); + bool success = unitree_api__msg__RequestLease__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__RequestLease__destroy(unitree_api__msg__RequestLease * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__RequestLease__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__RequestLease__Sequence__init(unitree_api__msg__RequestLease__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestLease * data = NULL; + + if (size) { + data = (unitree_api__msg__RequestLease *)allocator.zero_allocate(size, sizeof(unitree_api__msg__RequestLease), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__RequestLease__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__RequestLease__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__RequestLease__Sequence__fini(unitree_api__msg__RequestLease__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__RequestLease__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__RequestLease__Sequence * +unitree_api__msg__RequestLease__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestLease__Sequence * array = (unitree_api__msg__RequestLease__Sequence *)allocator.allocate(sizeof(unitree_api__msg__RequestLease__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__RequestLease__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__RequestLease__Sequence__destroy(unitree_api__msg__RequestLease__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__RequestLease__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__RequestLease__Sequence__are_equal(const unitree_api__msg__RequestLease__Sequence * lhs, const unitree_api__msg__RequestLease__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__RequestLease__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__RequestLease__Sequence__copy( + const unitree_api__msg__RequestLease__Sequence * input, + unitree_api__msg__RequestLease__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__RequestLease); + unitree_api__msg__RequestLease * data = + (unitree_api__msg__RequestLease *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__RequestLease__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__RequestLease__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__RequestLease__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.h new file mode 100644 index 0000000..50d8c29 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/request_lease__struct.h" + +/// Initialize msg/RequestLease message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__RequestLease + * )) before or use + * unitree_api__msg__RequestLease__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestLease__init(unitree_api__msg__RequestLease * msg); + +/// Finalize msg/RequestLease message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestLease__fini(unitree_api__msg__RequestLease * msg); + +/// Create msg/RequestLease message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__RequestLease__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestLease * +unitree_api__msg__RequestLease__create(); + +/// Destroy msg/RequestLease message. +/** + * It calls + * unitree_api__msg__RequestLease__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestLease__destroy(unitree_api__msg__RequestLease * msg); + +/// Check for msg/RequestLease message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestLease__are_equal(const unitree_api__msg__RequestLease * lhs, const unitree_api__msg__RequestLease * rhs); + +/// Copy a msg/RequestLease message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestLease__copy( + const unitree_api__msg__RequestLease * input, + unitree_api__msg__RequestLease * output); + +/// Initialize array of msg/RequestLease messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__RequestLease__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestLease__Sequence__init(unitree_api__msg__RequestLease__Sequence * array, size_t size); + +/// Finalize array of msg/RequestLease messages. +/** + * It calls + * unitree_api__msg__RequestLease__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestLease__Sequence__fini(unitree_api__msg__RequestLease__Sequence * array); + +/// Create array of msg/RequestLease messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__RequestLease__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestLease__Sequence * +unitree_api__msg__RequestLease__Sequence__create(size_t size); + +/// Destroy array of msg/RequestLease messages. +/** + * It calls + * unitree_api__msg__RequestLease__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestLease__Sequence__destroy(unitree_api__msg__RequestLease__Sequence * array); + +/// Check for msg/RequestLease message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestLease__Sequence__are_equal(const unitree_api__msg__RequestLease__Sequence * lhs, const unitree_api__msg__RequestLease__Sequence * rhs); + +/// Copy an array of msg/RequestLease messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestLease__Sequence__copy( + const unitree_api__msg__RequestLease__Sequence * input, + unitree_api__msg__RequestLease__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..6f33d15 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__RequestLease( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__RequestLease( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, RequestLease)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..c5cbd21 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/request_lease__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::RequestLease & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::RequestLease & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::RequestLease & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_RequestLease( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, RequestLease)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..1fc3f11 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestLease)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..1780367 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestLease)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.h new file mode 100644 index 0000000..bdc3174 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.h @@ -0,0 +1,40 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/RequestLease in the package unitree_api. +typedef struct unitree_api__msg__RequestLease +{ + int64_t id; +} unitree_api__msg__RequestLease; + +// Struct for a sequence of unitree_api__msg__RequestLease. +typedef struct unitree_api__msg__RequestLease__Sequence +{ + unitree_api__msg__RequestLease * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__RequestLease__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.hpp new file mode 100644 index 0000000..f07dd09 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__struct.hpp @@ -0,0 +1,130 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__RequestLease __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__RequestLease __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct RequestLease_ +{ + using Type = RequestLease_; + + explicit RequestLease_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->id = 0ll; + } + } + + explicit RequestLease_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->id = 0ll; + } + } + + // field types and members + using _id_type = + int64_t; + _id_type id; + + // setters for named parameter idiom + Type & set__id( + const int64_t & _arg) + { + this->id = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::RequestLease_ *; + using ConstRawPtr = + const unitree_api::msg::RequestLease_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__RequestLease + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__RequestLease + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const RequestLease_ & other) const + { + if (this->id != other.id) { + return false; + } + return true; + } + bool operator!=(const RequestLease_ & other) const + { + return !this->operator==(other); + } +}; // struct RequestLease_ + +// alias to use template instance with default allocator +using RequestLease = + unitree_api::msg::RequestLease_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__traits.hpp new file mode 100644 index 0000000..2bc3ad2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TRAITS_HPP_ + +#include "unitree_api/msg/detail/request_lease__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::RequestLease"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/RequestLease"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.c new file mode 100644 index 0000000..3e2e1c3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.c @@ -0,0 +1,81 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/request_lease__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/request_lease__functions.h" +#include "unitree_api/msg/detail/request_lease__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void RequestLease__rosidl_typesupport_introspection_c__RequestLease_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__RequestLease__init(message_memory); +} + +void RequestLease__rosidl_typesupport_introspection_c__RequestLease_fini_function(void * message_memory) +{ + unitree_api__msg__RequestLease__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_member_array[1] = { + { + "id", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT64, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestLease, id), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_members = { + "unitree_api__msg", // message namespace + "RequestLease", // message name + 1, // number of fields + sizeof(unitree_api__msg__RequestLease), + RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_member_array, // message members + RequestLease__rosidl_typesupport_introspection_c__RequestLease_init_function, // function to initialize message memory (memory has to be allocated) + RequestLease__rosidl_typesupport_introspection_c__RequestLease_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_type_support_handle = { + 0, + &RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestLease)() { + if (!RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_type_support_handle.typesupport_identifier) { + RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &RequestLease__rosidl_typesupport_introspection_c__RequestLease_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.cpp new file mode 100644 index 0000000..0fb2579 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.cpp @@ -0,0 +1,107 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/request_lease__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void RequestLease_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::RequestLease(_init); +} + +void RequestLease_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~RequestLease(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember RequestLease_message_member_array[1] = { + { + "id", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT64, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestLease, id), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers RequestLease_message_members = { + "unitree_api::msg", // message namespace + "RequestLease", // message name + 1, // number of fields + sizeof(unitree_api::msg::RequestLease), + RequestLease_message_member_array, // message members + RequestLease_init_function, // function to initialize message memory (memory has to be allocated) + RequestLease_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t RequestLease_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &RequestLease_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestLease_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestLease)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestLease_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.h new file mode 100644 index 0000000..226b055 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + RequestLease +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.hpp new file mode 100644 index 0000000..a5a577a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_lease__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + RequestLease +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_LEASE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__builder.hpp new file mode 100644 index 0000000..a84b681 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__BUILDER_HPP_ + +#include "unitree_api/msg/detail/request_policy__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_RequestPolicy_noreply +{ +public: + explicit Init_RequestPolicy_noreply(::unitree_api::msg::RequestPolicy & msg) + : msg_(msg) + {} + ::unitree_api::msg::RequestPolicy noreply(::unitree_api::msg::RequestPolicy::_noreply_type arg) + { + msg_.noreply = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::RequestPolicy msg_; +}; + +class Init_RequestPolicy_priority +{ +public: + Init_RequestPolicy_priority() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_RequestPolicy_noreply priority(::unitree_api::msg::RequestPolicy::_priority_type arg) + { + msg_.priority = std::move(arg); + return Init_RequestPolicy_noreply(msg_); + } + +private: + ::unitree_api::msg::RequestPolicy msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::RequestPolicy>() +{ + return unitree_api::msg::builder::Init_RequestPolicy_priority(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.c new file mode 100644 index 0000000..8cf1965 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.c @@ -0,0 +1,239 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/request_policy__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_api__msg__RequestPolicy__init(unitree_api__msg__RequestPolicy * msg) +{ + if (!msg) { + return false; + } + // priority + // noreply + return true; +} + +void +unitree_api__msg__RequestPolicy__fini(unitree_api__msg__RequestPolicy * msg) +{ + if (!msg) { + return; + } + // priority + // noreply +} + +bool +unitree_api__msg__RequestPolicy__are_equal(const unitree_api__msg__RequestPolicy * lhs, const unitree_api__msg__RequestPolicy * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // priority + if (lhs->priority != rhs->priority) { + return false; + } + // noreply + if (lhs->noreply != rhs->noreply) { + return false; + } + return true; +} + +bool +unitree_api__msg__RequestPolicy__copy( + const unitree_api__msg__RequestPolicy * input, + unitree_api__msg__RequestPolicy * output) +{ + if (!input || !output) { + return false; + } + // priority + output->priority = input->priority; + // noreply + output->noreply = input->noreply; + return true; +} + +unitree_api__msg__RequestPolicy * +unitree_api__msg__RequestPolicy__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestPolicy * msg = (unitree_api__msg__RequestPolicy *)allocator.allocate(sizeof(unitree_api__msg__RequestPolicy), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__RequestPolicy)); + bool success = unitree_api__msg__RequestPolicy__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__RequestPolicy__destroy(unitree_api__msg__RequestPolicy * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__RequestPolicy__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__RequestPolicy__Sequence__init(unitree_api__msg__RequestPolicy__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestPolicy * data = NULL; + + if (size) { + data = (unitree_api__msg__RequestPolicy *)allocator.zero_allocate(size, sizeof(unitree_api__msg__RequestPolicy), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__RequestPolicy__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__RequestPolicy__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__RequestPolicy__Sequence__fini(unitree_api__msg__RequestPolicy__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__RequestPolicy__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__RequestPolicy__Sequence * +unitree_api__msg__RequestPolicy__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__RequestPolicy__Sequence * array = (unitree_api__msg__RequestPolicy__Sequence *)allocator.allocate(sizeof(unitree_api__msg__RequestPolicy__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__RequestPolicy__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__RequestPolicy__Sequence__destroy(unitree_api__msg__RequestPolicy__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__RequestPolicy__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__RequestPolicy__Sequence__are_equal(const unitree_api__msg__RequestPolicy__Sequence * lhs, const unitree_api__msg__RequestPolicy__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__RequestPolicy__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__RequestPolicy__Sequence__copy( + const unitree_api__msg__RequestPolicy__Sequence * input, + unitree_api__msg__RequestPolicy__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__RequestPolicy); + unitree_api__msg__RequestPolicy * data = + (unitree_api__msg__RequestPolicy *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__RequestPolicy__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__RequestPolicy__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__RequestPolicy__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.h new file mode 100644 index 0000000..af9c364 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/request_policy__struct.h" + +/// Initialize msg/RequestPolicy message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__RequestPolicy + * )) before or use + * unitree_api__msg__RequestPolicy__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestPolicy__init(unitree_api__msg__RequestPolicy * msg); + +/// Finalize msg/RequestPolicy message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestPolicy__fini(unitree_api__msg__RequestPolicy * msg); + +/// Create msg/RequestPolicy message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__RequestPolicy__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestPolicy * +unitree_api__msg__RequestPolicy__create(); + +/// Destroy msg/RequestPolicy message. +/** + * It calls + * unitree_api__msg__RequestPolicy__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestPolicy__destroy(unitree_api__msg__RequestPolicy * msg); + +/// Check for msg/RequestPolicy message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestPolicy__are_equal(const unitree_api__msg__RequestPolicy * lhs, const unitree_api__msg__RequestPolicy * rhs); + +/// Copy a msg/RequestPolicy message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestPolicy__copy( + const unitree_api__msg__RequestPolicy * input, + unitree_api__msg__RequestPolicy * output); + +/// Initialize array of msg/RequestPolicy messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__RequestPolicy__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestPolicy__Sequence__init(unitree_api__msg__RequestPolicy__Sequence * array, size_t size); + +/// Finalize array of msg/RequestPolicy messages. +/** + * It calls + * unitree_api__msg__RequestPolicy__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestPolicy__Sequence__fini(unitree_api__msg__RequestPolicy__Sequence * array); + +/// Create array of msg/RequestPolicy messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__RequestPolicy__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__RequestPolicy__Sequence * +unitree_api__msg__RequestPolicy__Sequence__create(size_t size); + +/// Destroy array of msg/RequestPolicy messages. +/** + * It calls + * unitree_api__msg__RequestPolicy__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__RequestPolicy__Sequence__destroy(unitree_api__msg__RequestPolicy__Sequence * array); + +/// Check for msg/RequestPolicy message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestPolicy__Sequence__are_equal(const unitree_api__msg__RequestPolicy__Sequence * lhs, const unitree_api__msg__RequestPolicy__Sequence * rhs); + +/// Copy an array of msg/RequestPolicy messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__RequestPolicy__Sequence__copy( + const unitree_api__msg__RequestPolicy__Sequence * input, + unitree_api__msg__RequestPolicy__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..ea36c92 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__RequestPolicy( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__RequestPolicy( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, RequestPolicy)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..4e31ff1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/request_policy__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::RequestPolicy & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::RequestPolicy & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::RequestPolicy & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_RequestPolicy( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, RequestPolicy)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..ef048e6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestPolicy)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..1058feb --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestPolicy)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.h new file mode 100644 index 0000000..6e7c438 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.h @@ -0,0 +1,41 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/RequestPolicy in the package unitree_api. +typedef struct unitree_api__msg__RequestPolicy +{ + int32_t priority; + bool noreply; +} unitree_api__msg__RequestPolicy; + +// Struct for a sequence of unitree_api__msg__RequestPolicy. +typedef struct unitree_api__msg__RequestPolicy__Sequence +{ + unitree_api__msg__RequestPolicy * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__RequestPolicy__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.hpp new file mode 100644 index 0000000..3203121 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__struct.hpp @@ -0,0 +1,144 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__RequestPolicy __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__RequestPolicy __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct RequestPolicy_ +{ + using Type = RequestPolicy_; + + explicit RequestPolicy_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->priority = 0l; + this->noreply = false; + } + } + + explicit RequestPolicy_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->priority = 0l; + this->noreply = false; + } + } + + // field types and members + using _priority_type = + int32_t; + _priority_type priority; + using _noreply_type = + bool; + _noreply_type noreply; + + // setters for named parameter idiom + Type & set__priority( + const int32_t & _arg) + { + this->priority = _arg; + return *this; + } + Type & set__noreply( + const bool & _arg) + { + this->noreply = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::RequestPolicy_ *; + using ConstRawPtr = + const unitree_api::msg::RequestPolicy_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__RequestPolicy + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__RequestPolicy + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const RequestPolicy_ & other) const + { + if (this->priority != other.priority) { + return false; + } + if (this->noreply != other.noreply) { + return false; + } + return true; + } + bool operator!=(const RequestPolicy_ & other) const + { + return !this->operator==(other); + } +}; // struct RequestPolicy_ + +// alias to use template instance with default allocator +using RequestPolicy = + unitree_api::msg::RequestPolicy_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__traits.hpp new file mode 100644 index 0000000..29bdc50 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TRAITS_HPP_ + +#include "unitree_api/msg/detail/request_policy__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::RequestPolicy"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/RequestPolicy"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.c new file mode 100644 index 0000000..c8df052 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.c @@ -0,0 +1,96 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/request_policy__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/request_policy__functions.h" +#include "unitree_api/msg/detail/request_policy__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__RequestPolicy__init(message_memory); +} + +void RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_fini_function(void * message_memory) +{ + unitree_api__msg__RequestPolicy__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_member_array[2] = { + { + "priority", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestPolicy, priority), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "noreply", // name + rosidl_typesupport_introspection_c__ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__RequestPolicy, noreply), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_members = { + "unitree_api__msg", // message namespace + "RequestPolicy", // message name + 2, // number of fields + sizeof(unitree_api__msg__RequestPolicy), + RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_member_array, // message members + RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_init_function, // function to initialize message memory (memory has to be allocated) + RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_type_support_handle = { + 0, + &RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestPolicy)() { + if (!RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_type_support_handle.typesupport_identifier) { + RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &RequestPolicy__rosidl_typesupport_introspection_c__RequestPolicy_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.cpp new file mode 100644 index 0000000..c12f08f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.cpp @@ -0,0 +1,122 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/request_policy__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void RequestPolicy_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::RequestPolicy(_init); +} + +void RequestPolicy_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~RequestPolicy(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember RequestPolicy_message_member_array[2] = { + { + "priority", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestPolicy, priority), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "noreply", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_BOOLEAN, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::RequestPolicy, noreply), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers RequestPolicy_message_members = { + "unitree_api::msg", // message namespace + "RequestPolicy", // message name + 2, // number of fields + sizeof(unitree_api::msg::RequestPolicy), + RequestPolicy_message_member_array, // message members + RequestPolicy_init_function, // function to initialize message memory (memory has to be allocated) + RequestPolicy_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t RequestPolicy_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &RequestPolicy_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestPolicy_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, RequestPolicy)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::RequestPolicy_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.h new file mode 100644 index 0000000..7fe2cf2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + RequestPolicy +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.hpp new file mode 100644 index 0000000..68dbcba --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/request_policy__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + RequestPolicy +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__REQUEST_POLICY__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__builder.hpp new file mode 100644 index 0000000..8f0cf0b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__builder.hpp @@ -0,0 +1,87 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__BUILDER_HPP_ + +#include "unitree_api/msg/detail/response__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Response_binary +{ +public: + explicit Init_Response_binary(::unitree_api::msg::Response & msg) + : msg_(msg) + {} + ::unitree_api::msg::Response binary(::unitree_api::msg::Response::_binary_type arg) + { + msg_.binary = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::Response msg_; +}; + +class Init_Response_data +{ +public: + explicit Init_Response_data(::unitree_api::msg::Response & msg) + : msg_(msg) + {} + Init_Response_binary data(::unitree_api::msg::Response::_data_type arg) + { + msg_.data = std::move(arg); + return Init_Response_binary(msg_); + } + +private: + ::unitree_api::msg::Response msg_; +}; + +class Init_Response_header +{ +public: + Init_Response_header() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Response_data header(::unitree_api::msg::Response::_header_type arg) + { + msg_.header = std::move(arg); + return Init_Response_data(msg_); + } + +private: + ::unitree_api::msg::Response msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::Response>() +{ + return unitree_api::msg::builder::Init_Response_header(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.c new file mode 100644 index 0000000..e30ee9b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.c @@ -0,0 +1,288 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/response__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `header` +#include "unitree_api/msg/detail/response_header__functions.h" +// Member `data` +#include "rosidl_runtime_c/string_functions.h" +// Member `binary` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool +unitree_api__msg__Response__init(unitree_api__msg__Response * msg) +{ + if (!msg) { + return false; + } + // header + if (!unitree_api__msg__ResponseHeader__init(&msg->header)) { + unitree_api__msg__Response__fini(msg); + return false; + } + // data + if (!rosidl_runtime_c__String__init(&msg->data)) { + unitree_api__msg__Response__fini(msg); + return false; + } + // binary + if (!rosidl_runtime_c__int8__Sequence__init(&msg->binary, 0)) { + unitree_api__msg__Response__fini(msg); + return false; + } + return true; +} + +void +unitree_api__msg__Response__fini(unitree_api__msg__Response * msg) +{ + if (!msg) { + return; + } + // header + unitree_api__msg__ResponseHeader__fini(&msg->header); + // data + rosidl_runtime_c__String__fini(&msg->data); + // binary + rosidl_runtime_c__int8__Sequence__fini(&msg->binary); +} + +bool +unitree_api__msg__Response__are_equal(const unitree_api__msg__Response * lhs, const unitree_api__msg__Response * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // header + if (!unitree_api__msg__ResponseHeader__are_equal( + &(lhs->header), &(rhs->header))) + { + return false; + } + // data + if (!rosidl_runtime_c__String__are_equal( + &(lhs->data), &(rhs->data))) + { + return false; + } + // binary + if (!rosidl_runtime_c__int8__Sequence__are_equal( + &(lhs->binary), &(rhs->binary))) + { + return false; + } + return true; +} + +bool +unitree_api__msg__Response__copy( + const unitree_api__msg__Response * input, + unitree_api__msg__Response * output) +{ + if (!input || !output) { + return false; + } + // header + if (!unitree_api__msg__ResponseHeader__copy( + &(input->header), &(output->header))) + { + return false; + } + // data + if (!rosidl_runtime_c__String__copy( + &(input->data), &(output->data))) + { + return false; + } + // binary + if (!rosidl_runtime_c__int8__Sequence__copy( + &(input->binary), &(output->binary))) + { + return false; + } + return true; +} + +unitree_api__msg__Response * +unitree_api__msg__Response__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__Response * msg = (unitree_api__msg__Response *)allocator.allocate(sizeof(unitree_api__msg__Response), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__Response)); + bool success = unitree_api__msg__Response__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__Response__destroy(unitree_api__msg__Response * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__Response__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__Response__Sequence__init(unitree_api__msg__Response__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__Response * data = NULL; + + if (size) { + data = (unitree_api__msg__Response *)allocator.zero_allocate(size, sizeof(unitree_api__msg__Response), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__Response__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__Response__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__Response__Sequence__fini(unitree_api__msg__Response__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__Response__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__Response__Sequence * +unitree_api__msg__Response__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__Response__Sequence * array = (unitree_api__msg__Response__Sequence *)allocator.allocate(sizeof(unitree_api__msg__Response__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__Response__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__Response__Sequence__destroy(unitree_api__msg__Response__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__Response__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__Response__Sequence__are_equal(const unitree_api__msg__Response__Sequence * lhs, const unitree_api__msg__Response__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__Response__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__Response__Sequence__copy( + const unitree_api__msg__Response__Sequence * input, + unitree_api__msg__Response__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__Response); + unitree_api__msg__Response * data = + (unitree_api__msg__Response *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__Response__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__Response__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__Response__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.h new file mode 100644 index 0000000..a2a89c0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/response__struct.h" + +/// Initialize msg/Response message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__Response + * )) before or use + * unitree_api__msg__Response__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Response__init(unitree_api__msg__Response * msg); + +/// Finalize msg/Response message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Response__fini(unitree_api__msg__Response * msg); + +/// Create msg/Response message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__Response__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__Response * +unitree_api__msg__Response__create(); + +/// Destroy msg/Response message. +/** + * It calls + * unitree_api__msg__Response__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Response__destroy(unitree_api__msg__Response * msg); + +/// Check for msg/Response message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Response__are_equal(const unitree_api__msg__Response * lhs, const unitree_api__msg__Response * rhs); + +/// Copy a msg/Response message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Response__copy( + const unitree_api__msg__Response * input, + unitree_api__msg__Response * output); + +/// Initialize array of msg/Response messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__Response__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Response__Sequence__init(unitree_api__msg__Response__Sequence * array, size_t size); + +/// Finalize array of msg/Response messages. +/** + * It calls + * unitree_api__msg__Response__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Response__Sequence__fini(unitree_api__msg__Response__Sequence * array); + +/// Create array of msg/Response messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__Response__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__Response__Sequence * +unitree_api__msg__Response__Sequence__create(size_t size); + +/// Destroy array of msg/Response messages. +/** + * It calls + * unitree_api__msg__Response__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__Response__Sequence__destroy(unitree_api__msg__Response__Sequence * array); + +/// Check for msg/Response message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Response__Sequence__are_equal(const unitree_api__msg__Response__Sequence * lhs, const unitree_api__msg__Response__Sequence * rhs); + +/// Copy an array of msg/Response messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__Response__Sequence__copy( + const unitree_api__msg__Response__Sequence * input, + unitree_api__msg__Response__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..cba0d6d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__Response( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__Response( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, Response)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..bc0ef8a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/response__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::Response & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::Response & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::Response & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_Response( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, Response)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..7ffd774 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, Response)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..9cfa813 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, Response)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.h new file mode 100644 index 0000000..de3d930 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.h @@ -0,0 +1,50 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'header' +#include "unitree_api/msg/detail/response_header__struct.h" +// Member 'data' +#include "rosidl_runtime_c/string.h" +// Member 'binary' +#include "rosidl_runtime_c/primitives_sequence.h" + +// Struct defined in msg/Response in the package unitree_api. +typedef struct unitree_api__msg__Response +{ + unitree_api__msg__ResponseHeader header; + rosidl_runtime_c__String data; + rosidl_runtime_c__int8__Sequence binary; +} unitree_api__msg__Response; + +// Struct for a sequence of unitree_api__msg__Response. +typedef struct unitree_api__msg__Response__Sequence +{ + unitree_api__msg__Response * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__Response__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.hpp new file mode 100644 index 0000000..b8e170c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__struct.hpp @@ -0,0 +1,160 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'header' +#include "unitree_api/msg/detail/response_header__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__Response __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__Response __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct Response_ +{ + using Type = Response_; + + explicit Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->data = ""; + } + } + + explicit Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : header(_alloc, _init), + data(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->data = ""; + } + } + + // field types and members + using _header_type = + unitree_api::msg::ResponseHeader_; + _header_type header; + using _data_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _data_type data; + using _binary_type = + std::vector::other>; + _binary_type binary; + + // setters for named parameter idiom + Type & set__header( + const unitree_api::msg::ResponseHeader_ & _arg) + { + this->header = _arg; + return *this; + } + Type & set__data( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->data = _arg; + return *this; + } + Type & set__binary( + const std::vector::other> & _arg) + { + this->binary = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::Response_ *; + using ConstRawPtr = + const unitree_api::msg::Response_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__Response + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__Response + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Response_ & other) const + { + if (this->header != other.header) { + return false; + } + if (this->data != other.data) { + return false; + } + if (this->binary != other.binary) { + return false; + } + return true; + } + bool operator!=(const Response_ & other) const + { + return !this->operator==(other); + } +}; // struct Response_ + +// alias to use template instance with default allocator +using Response = + unitree_api::msg::Response_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__traits.hpp new file mode 100644 index 0000000..7716161 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__traits.hpp @@ -0,0 +1,46 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__TRAITS_HPP_ + +#include "unitree_api/msg/detail/response__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'header' +#include "unitree_api/msg/detail/response_header__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::Response"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/Response"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.c new file mode 100644 index 0000000..1eb4b01 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.c @@ -0,0 +1,123 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/response__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/response__functions.h" +#include "unitree_api/msg/detail/response__struct.h" + + +// Include directives for member types +// Member `header` +#include "unitree_api/msg/response_header.h" +// Member `header` +#include "unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_c.h" +// Member `data` +#include "rosidl_runtime_c/string_functions.h" +// Member `binary` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Response__rosidl_typesupport_introspection_c__Response_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__Response__init(message_memory); +} + +void Response__rosidl_typesupport_introspection_c__Response_fini_function(void * message_memory) +{ + unitree_api__msg__Response__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Response__rosidl_typesupport_introspection_c__Response_message_member_array[3] = { + { + "header", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__Response, header), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "data", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__Response, data), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "binary", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__Response, binary), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Response__rosidl_typesupport_introspection_c__Response_message_members = { + "unitree_api__msg", // message namespace + "Response", // message name + 3, // number of fields + sizeof(unitree_api__msg__Response), + Response__rosidl_typesupport_introspection_c__Response_message_member_array, // message members + Response__rosidl_typesupport_introspection_c__Response_init_function, // function to initialize message memory (memory has to be allocated) + Response__rosidl_typesupport_introspection_c__Response_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Response__rosidl_typesupport_introspection_c__Response_message_type_support_handle = { + 0, + &Response__rosidl_typesupport_introspection_c__Response_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, Response)() { + Response__rosidl_typesupport_introspection_c__Response_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, ResponseHeader)(); + if (!Response__rosidl_typesupport_introspection_c__Response_message_type_support_handle.typesupport_identifier) { + Response__rosidl_typesupport_introspection_c__Response_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Response__rosidl_typesupport_introspection_c__Response_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.cpp new file mode 100644 index 0000000..a27d035 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.cpp @@ -0,0 +1,164 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/response__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Response_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::Response(_init); +} + +void Response_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Response(); +} + +size_t size_function__Response__binary(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__Response__binary(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__Response__binary(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__Response__binary(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Response_message_member_array[3] = { + { + "header", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::Response, header), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "data", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::Response, data), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "binary", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::Response, binary), // bytes offset in struct + nullptr, // default value + size_function__Response__binary, // size() function pointer + get_const_function__Response__binary, // get_const(index) function pointer + get_function__Response__binary, // get(index) function pointer + resize_function__Response__binary // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Response_message_members = { + "unitree_api::msg", // message namespace + "Response", // message name + 3, // number of fields + sizeof(unitree_api::msg::Response), + Response_message_member_array, // message members + Response_init_function, // function to initialize message memory (memory has to be allocated) + Response_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Response_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Response_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::Response_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, Response)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::Response_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.h new file mode 100644 index 0000000..8b23ed0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + Response +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.hpp new file mode 100644 index 0000000..27859e9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + Response +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__builder.hpp new file mode 100644 index 0000000..8f76d7d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__BUILDER_HPP_ + +#include "unitree_api/msg/detail/response_header__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_ResponseHeader_status +{ +public: + explicit Init_ResponseHeader_status(::unitree_api::msg::ResponseHeader & msg) + : msg_(msg) + {} + ::unitree_api::msg::ResponseHeader status(::unitree_api::msg::ResponseHeader::_status_type arg) + { + msg_.status = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::ResponseHeader msg_; +}; + +class Init_ResponseHeader_identity +{ +public: + Init_ResponseHeader_identity() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_ResponseHeader_status identity(::unitree_api::msg::ResponseHeader::_identity_type arg) + { + msg_.identity = std::move(arg); + return Init_ResponseHeader_status(msg_); + } + +private: + ::unitree_api::msg::ResponseHeader msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::ResponseHeader>() +{ + return unitree_api::msg::builder::Init_ResponseHeader_identity(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.c new file mode 100644 index 0000000..5d705c7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.c @@ -0,0 +1,267 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/response_header__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `identity` +#include "unitree_api/msg/detail/request_identity__functions.h" +// Member `status` +#include "unitree_api/msg/detail/response_status__functions.h" + +bool +unitree_api__msg__ResponseHeader__init(unitree_api__msg__ResponseHeader * msg) +{ + if (!msg) { + return false; + } + // identity + if (!unitree_api__msg__RequestIdentity__init(&msg->identity)) { + unitree_api__msg__ResponseHeader__fini(msg); + return false; + } + // status + if (!unitree_api__msg__ResponseStatus__init(&msg->status)) { + unitree_api__msg__ResponseHeader__fini(msg); + return false; + } + return true; +} + +void +unitree_api__msg__ResponseHeader__fini(unitree_api__msg__ResponseHeader * msg) +{ + if (!msg) { + return; + } + // identity + unitree_api__msg__RequestIdentity__fini(&msg->identity); + // status + unitree_api__msg__ResponseStatus__fini(&msg->status); +} + +bool +unitree_api__msg__ResponseHeader__are_equal(const unitree_api__msg__ResponseHeader * lhs, const unitree_api__msg__ResponseHeader * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // identity + if (!unitree_api__msg__RequestIdentity__are_equal( + &(lhs->identity), &(rhs->identity))) + { + return false; + } + // status + if (!unitree_api__msg__ResponseStatus__are_equal( + &(lhs->status), &(rhs->status))) + { + return false; + } + return true; +} + +bool +unitree_api__msg__ResponseHeader__copy( + const unitree_api__msg__ResponseHeader * input, + unitree_api__msg__ResponseHeader * output) +{ + if (!input || !output) { + return false; + } + // identity + if (!unitree_api__msg__RequestIdentity__copy( + &(input->identity), &(output->identity))) + { + return false; + } + // status + if (!unitree_api__msg__ResponseStatus__copy( + &(input->status), &(output->status))) + { + return false; + } + return true; +} + +unitree_api__msg__ResponseHeader * +unitree_api__msg__ResponseHeader__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__ResponseHeader * msg = (unitree_api__msg__ResponseHeader *)allocator.allocate(sizeof(unitree_api__msg__ResponseHeader), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__ResponseHeader)); + bool success = unitree_api__msg__ResponseHeader__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__ResponseHeader__destroy(unitree_api__msg__ResponseHeader * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__ResponseHeader__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__ResponseHeader__Sequence__init(unitree_api__msg__ResponseHeader__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__ResponseHeader * data = NULL; + + if (size) { + data = (unitree_api__msg__ResponseHeader *)allocator.zero_allocate(size, sizeof(unitree_api__msg__ResponseHeader), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__ResponseHeader__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__ResponseHeader__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__ResponseHeader__Sequence__fini(unitree_api__msg__ResponseHeader__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__ResponseHeader__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__ResponseHeader__Sequence * +unitree_api__msg__ResponseHeader__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__ResponseHeader__Sequence * array = (unitree_api__msg__ResponseHeader__Sequence *)allocator.allocate(sizeof(unitree_api__msg__ResponseHeader__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__ResponseHeader__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__ResponseHeader__Sequence__destroy(unitree_api__msg__ResponseHeader__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__ResponseHeader__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__ResponseHeader__Sequence__are_equal(const unitree_api__msg__ResponseHeader__Sequence * lhs, const unitree_api__msg__ResponseHeader__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__ResponseHeader__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__ResponseHeader__Sequence__copy( + const unitree_api__msg__ResponseHeader__Sequence * input, + unitree_api__msg__ResponseHeader__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__ResponseHeader); + unitree_api__msg__ResponseHeader * data = + (unitree_api__msg__ResponseHeader *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__ResponseHeader__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__ResponseHeader__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__ResponseHeader__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.h new file mode 100644 index 0000000..8837dc1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/response_header__struct.h" + +/// Initialize msg/ResponseHeader message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__ResponseHeader + * )) before or use + * unitree_api__msg__ResponseHeader__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseHeader__init(unitree_api__msg__ResponseHeader * msg); + +/// Finalize msg/ResponseHeader message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseHeader__fini(unitree_api__msg__ResponseHeader * msg); + +/// Create msg/ResponseHeader message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__ResponseHeader__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__ResponseHeader * +unitree_api__msg__ResponseHeader__create(); + +/// Destroy msg/ResponseHeader message. +/** + * It calls + * unitree_api__msg__ResponseHeader__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseHeader__destroy(unitree_api__msg__ResponseHeader * msg); + +/// Check for msg/ResponseHeader message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseHeader__are_equal(const unitree_api__msg__ResponseHeader * lhs, const unitree_api__msg__ResponseHeader * rhs); + +/// Copy a msg/ResponseHeader message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseHeader__copy( + const unitree_api__msg__ResponseHeader * input, + unitree_api__msg__ResponseHeader * output); + +/// Initialize array of msg/ResponseHeader messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__ResponseHeader__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseHeader__Sequence__init(unitree_api__msg__ResponseHeader__Sequence * array, size_t size); + +/// Finalize array of msg/ResponseHeader messages. +/** + * It calls + * unitree_api__msg__ResponseHeader__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseHeader__Sequence__fini(unitree_api__msg__ResponseHeader__Sequence * array); + +/// Create array of msg/ResponseHeader messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__ResponseHeader__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__ResponseHeader__Sequence * +unitree_api__msg__ResponseHeader__Sequence__create(size_t size); + +/// Destroy array of msg/ResponseHeader messages. +/** + * It calls + * unitree_api__msg__ResponseHeader__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseHeader__Sequence__destroy(unitree_api__msg__ResponseHeader__Sequence * array); + +/// Check for msg/ResponseHeader message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseHeader__Sequence__are_equal(const unitree_api__msg__ResponseHeader__Sequence * lhs, const unitree_api__msg__ResponseHeader__Sequence * rhs); + +/// Copy an array of msg/ResponseHeader messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseHeader__Sequence__copy( + const unitree_api__msg__ResponseHeader__Sequence * input, + unitree_api__msg__ResponseHeader__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..c1c364d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__ResponseHeader( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__ResponseHeader( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, ResponseHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..d76073f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/response_header__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::ResponseHeader & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::ResponseHeader & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::ResponseHeader & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_ResponseHeader( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, ResponseHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..c314b11 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, ResponseHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..c578e54 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, ResponseHeader)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.h new file mode 100644 index 0000000..f7dd860 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.h @@ -0,0 +1,47 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'identity' +#include "unitree_api/msg/detail/request_identity__struct.h" +// Member 'status' +#include "unitree_api/msg/detail/response_status__struct.h" + +// Struct defined in msg/ResponseHeader in the package unitree_api. +typedef struct unitree_api__msg__ResponseHeader +{ + unitree_api__msg__RequestIdentity identity; + unitree_api__msg__ResponseStatus status; +} unitree_api__msg__ResponseHeader; + +// Struct for a sequence of unitree_api__msg__ResponseHeader. +typedef struct unitree_api__msg__ResponseHeader__Sequence +{ + unitree_api__msg__ResponseHeader * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__ResponseHeader__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.hpp new file mode 100644 index 0000000..cb00d3b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__struct.hpp @@ -0,0 +1,143 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'identity' +#include "unitree_api/msg/detail/request_identity__struct.hpp" +// Member 'status' +#include "unitree_api/msg/detail/response_status__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__ResponseHeader __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__ResponseHeader __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct ResponseHeader_ +{ + using Type = ResponseHeader_; + + explicit ResponseHeader_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : identity(_init), + status(_init) + { + (void)_init; + } + + explicit ResponseHeader_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : identity(_alloc, _init), + status(_alloc, _init) + { + (void)_init; + } + + // field types and members + using _identity_type = + unitree_api::msg::RequestIdentity_; + _identity_type identity; + using _status_type = + unitree_api::msg::ResponseStatus_; + _status_type status; + + // setters for named parameter idiom + Type & set__identity( + const unitree_api::msg::RequestIdentity_ & _arg) + { + this->identity = _arg; + return *this; + } + Type & set__status( + const unitree_api::msg::ResponseStatus_ & _arg) + { + this->status = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::ResponseHeader_ *; + using ConstRawPtr = + const unitree_api::msg::ResponseHeader_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__ResponseHeader + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__ResponseHeader + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const ResponseHeader_ & other) const + { + if (this->identity != other.identity) { + return false; + } + if (this->status != other.status) { + return false; + } + return true; + } + bool operator!=(const ResponseHeader_ & other) const + { + return !this->operator==(other); + } +}; // struct ResponseHeader_ + +// alias to use template instance with default allocator +using ResponseHeader = + unitree_api::msg::ResponseHeader_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__traits.hpp new file mode 100644 index 0000000..a3cb0c2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__traits.hpp @@ -0,0 +1,48 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TRAITS_HPP_ + +#include "unitree_api/msg/detail/response_header__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'identity' +#include "unitree_api/msg/detail/request_identity__traits.hpp" +// Member 'status' +#include "unitree_api/msg/detail/response_status__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::ResponseHeader"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/ResponseHeader"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.c new file mode 100644 index 0000000..e728e73 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.c @@ -0,0 +1,110 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/response_header__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/response_header__functions.h" +#include "unitree_api/msg/detail/response_header__struct.h" + + +// Include directives for member types +// Member `identity` +#include "unitree_api/msg/request_identity.h" +// Member `identity` +#include "unitree_api/msg/detail/request_identity__rosidl_typesupport_introspection_c.h" +// Member `status` +#include "unitree_api/msg/response_status.h" +// Member `status` +#include "unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__ResponseHeader__init(message_memory); +} + +void ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_fini_function(void * message_memory) +{ + unitree_api__msg__ResponseHeader__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_member_array[2] = { + { + "identity", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__ResponseHeader, identity), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "status", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__ResponseHeader, status), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_members = { + "unitree_api__msg", // message namespace + "ResponseHeader", // message name + 2, // number of fields + sizeof(unitree_api__msg__ResponseHeader), + ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_member_array, // message members + ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_init_function, // function to initialize message memory (memory has to be allocated) + ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_type_support_handle = { + 0, + &ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, ResponseHeader)() { + ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, RequestIdentity)(); + ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_member_array[1].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, ResponseStatus)(); + if (!ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_type_support_handle.typesupport_identifier) { + ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &ResponseHeader__rosidl_typesupport_introspection_c__ResponseHeader_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.cpp new file mode 100644 index 0000000..ea946b8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.cpp @@ -0,0 +1,122 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/response_header__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void ResponseHeader_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::ResponseHeader(_init); +} + +void ResponseHeader_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~ResponseHeader(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember ResponseHeader_message_member_array[2] = { + { + "identity", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::ResponseHeader, identity), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "status", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::ResponseHeader, status), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers ResponseHeader_message_members = { + "unitree_api::msg", // message namespace + "ResponseHeader", // message name + 2, // number of fields + sizeof(unitree_api::msg::ResponseHeader), + ResponseHeader_message_member_array, // message members + ResponseHeader_init_function, // function to initialize message memory (memory has to be allocated) + ResponseHeader_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t ResponseHeader_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &ResponseHeader_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::ResponseHeader_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, ResponseHeader)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::ResponseHeader_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.h new file mode 100644 index 0000000..a9d20af --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + ResponseHeader +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.hpp new file mode 100644 index 0000000..3664697 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_header__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + ResponseHeader +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_HEADER__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__builder.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__builder.hpp new file mode 100644 index 0000000..6b78a61 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__builder.hpp @@ -0,0 +1,55 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__BUILDER_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__BUILDER_HPP_ + +#include "unitree_api/msg/detail/response_status__struct.hpp" +#include +#include +#include + + +namespace unitree_api +{ + +namespace msg +{ + +namespace builder +{ + +class Init_ResponseStatus_code +{ +public: + Init_ResponseStatus_code() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::unitree_api::msg::ResponseStatus code(::unitree_api::msg::ResponseStatus::_code_type arg) + { + msg_.code = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_api::msg::ResponseStatus msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_api::msg::ResponseStatus>() +{ + return unitree_api::msg::builder::Init_ResponseStatus_code(); +} + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.c new file mode 100644 index 0000000..535cc3f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.c @@ -0,0 +1,231 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/detail/response_status__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_api__msg__ResponseStatus__init(unitree_api__msg__ResponseStatus * msg) +{ + if (!msg) { + return false; + } + // code + return true; +} + +void +unitree_api__msg__ResponseStatus__fini(unitree_api__msg__ResponseStatus * msg) +{ + if (!msg) { + return; + } + // code +} + +bool +unitree_api__msg__ResponseStatus__are_equal(const unitree_api__msg__ResponseStatus * lhs, const unitree_api__msg__ResponseStatus * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // code + if (lhs->code != rhs->code) { + return false; + } + return true; +} + +bool +unitree_api__msg__ResponseStatus__copy( + const unitree_api__msg__ResponseStatus * input, + unitree_api__msg__ResponseStatus * output) +{ + if (!input || !output) { + return false; + } + // code + output->code = input->code; + return true; +} + +unitree_api__msg__ResponseStatus * +unitree_api__msg__ResponseStatus__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__ResponseStatus * msg = (unitree_api__msg__ResponseStatus *)allocator.allocate(sizeof(unitree_api__msg__ResponseStatus), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_api__msg__ResponseStatus)); + bool success = unitree_api__msg__ResponseStatus__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_api__msg__ResponseStatus__destroy(unitree_api__msg__ResponseStatus * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_api__msg__ResponseStatus__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_api__msg__ResponseStatus__Sequence__init(unitree_api__msg__ResponseStatus__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__ResponseStatus * data = NULL; + + if (size) { + data = (unitree_api__msg__ResponseStatus *)allocator.zero_allocate(size, sizeof(unitree_api__msg__ResponseStatus), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_api__msg__ResponseStatus__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_api__msg__ResponseStatus__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_api__msg__ResponseStatus__Sequence__fini(unitree_api__msg__ResponseStatus__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_api__msg__ResponseStatus__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_api__msg__ResponseStatus__Sequence * +unitree_api__msg__ResponseStatus__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_api__msg__ResponseStatus__Sequence * array = (unitree_api__msg__ResponseStatus__Sequence *)allocator.allocate(sizeof(unitree_api__msg__ResponseStatus__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_api__msg__ResponseStatus__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_api__msg__ResponseStatus__Sequence__destroy(unitree_api__msg__ResponseStatus__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_api__msg__ResponseStatus__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_api__msg__ResponseStatus__Sequence__are_equal(const unitree_api__msg__ResponseStatus__Sequence * lhs, const unitree_api__msg__ResponseStatus__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_api__msg__ResponseStatus__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_api__msg__ResponseStatus__Sequence__copy( + const unitree_api__msg__ResponseStatus__Sequence * input, + unitree_api__msg__ResponseStatus__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_api__msg__ResponseStatus); + unitree_api__msg__ResponseStatus * data = + (unitree_api__msg__ResponseStatus *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_api__msg__ResponseStatus__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_api__msg__ResponseStatus__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_api__msg__ResponseStatus__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.h new file mode 100644 index 0000000..58b8246 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__FUNCTIONS_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_api/msg/detail/response_status__struct.h" + +/// Initialize msg/ResponseStatus message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_api__msg__ResponseStatus + * )) before or use + * unitree_api__msg__ResponseStatus__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseStatus__init(unitree_api__msg__ResponseStatus * msg); + +/// Finalize msg/ResponseStatus message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseStatus__fini(unitree_api__msg__ResponseStatus * msg); + +/// Create msg/ResponseStatus message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_api__msg__ResponseStatus__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__ResponseStatus * +unitree_api__msg__ResponseStatus__create(); + +/// Destroy msg/ResponseStatus message. +/** + * It calls + * unitree_api__msg__ResponseStatus__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseStatus__destroy(unitree_api__msg__ResponseStatus * msg); + +/// Check for msg/ResponseStatus message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseStatus__are_equal(const unitree_api__msg__ResponseStatus * lhs, const unitree_api__msg__ResponseStatus * rhs); + +/// Copy a msg/ResponseStatus message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseStatus__copy( + const unitree_api__msg__ResponseStatus * input, + unitree_api__msg__ResponseStatus * output); + +/// Initialize array of msg/ResponseStatus messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_api__msg__ResponseStatus__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseStatus__Sequence__init(unitree_api__msg__ResponseStatus__Sequence * array, size_t size); + +/// Finalize array of msg/ResponseStatus messages. +/** + * It calls + * unitree_api__msg__ResponseStatus__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseStatus__Sequence__fini(unitree_api__msg__ResponseStatus__Sequence * array); + +/// Create array of msg/ResponseStatus messages. +/** + * It allocates the memory for the array and calls + * unitree_api__msg__ResponseStatus__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +unitree_api__msg__ResponseStatus__Sequence * +unitree_api__msg__ResponseStatus__Sequence__create(size_t size); + +/// Destroy array of msg/ResponseStatus messages. +/** + * It calls + * unitree_api__msg__ResponseStatus__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +void +unitree_api__msg__ResponseStatus__Sequence__destroy(unitree_api__msg__ResponseStatus__Sequence * array); + +/// Check for msg/ResponseStatus message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseStatus__Sequence__are_equal(const unitree_api__msg__ResponseStatus__Sequence * lhs, const unitree_api__msg__ResponseStatus__Sequence * rhs); + +/// Copy an array of msg/ResponseStatus messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +bool +unitree_api__msg__ResponseStatus__Sequence__copy( + const unitree_api__msg__ResponseStatus__Sequence * input, + unitree_api__msg__ResponseStatus__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..c7a090f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t get_serialized_size_unitree_api__msg__ResponseStatus( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +size_t max_serialized_size_unitree_api__msg__ResponseStatus( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_api, msg, ResponseStatus)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..f21d788 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_api/msg/detail/response_status__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_serialize( + const unitree_api::msg::ResponseStatus & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_api::msg::ResponseStatus & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +get_serialized_size( + const unitree_api::msg::ResponseStatus & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +max_serialized_size_ResponseStatus( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_api + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_api, msg, ResponseStatus)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..8c3106c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, ResponseStatus)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..7a8ab2e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, ResponseStatus)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.h new file mode 100644 index 0000000..fc12219 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.h @@ -0,0 +1,40 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__STRUCT_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/ResponseStatus in the package unitree_api. +typedef struct unitree_api__msg__ResponseStatus +{ + int32_t code; +} unitree_api__msg__ResponseStatus; + +// Struct for a sequence of unitree_api__msg__ResponseStatus. +typedef struct unitree_api__msg__ResponseStatus__Sequence +{ + unitree_api__msg__ResponseStatus * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_api__msg__ResponseStatus__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.hpp new file mode 100644 index 0000000..126d908 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__struct.hpp @@ -0,0 +1,130 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__STRUCT_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_api__msg__ResponseStatus __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_api__msg__ResponseStatus __declspec(deprecated) +#endif + +namespace unitree_api +{ + +namespace msg +{ + +// message struct +template +struct ResponseStatus_ +{ + using Type = ResponseStatus_; + + explicit ResponseStatus_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->code = 0l; + } + } + + explicit ResponseStatus_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->code = 0l; + } + } + + // field types and members + using _code_type = + int32_t; + _code_type code; + + // setters for named parameter idiom + Type & set__code( + const int32_t & _arg) + { + this->code = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_api::msg::ResponseStatus_ *; + using ConstRawPtr = + const unitree_api::msg::ResponseStatus_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_api__msg__ResponseStatus + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_api__msg__ResponseStatus + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const ResponseStatus_ & other) const + { + if (this->code != other.code) { + return false; + } + return true; + } + bool operator!=(const ResponseStatus_ & other) const + { + return !this->operator==(other); + } +}; // struct ResponseStatus_ + +// alias to use template instance with default allocator +using ResponseStatus = + unitree_api::msg::ResponseStatus_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_api + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__traits.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__traits.hpp new file mode 100644 index 0000000..928afdf --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TRAITS_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TRAITS_HPP_ + +#include "unitree_api/msg/detail/response_status__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_api::msg::ResponseStatus"; +} + +template<> +inline const char * name() +{ + return "unitree_api/msg/ResponseStatus"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.c b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.c new file mode 100644 index 0000000..91fa969 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.c @@ -0,0 +1,81 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_api/msg/detail/response_status__rosidl_typesupport_introspection_c.h" +#include "unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_api/msg/detail/response_status__functions.h" +#include "unitree_api/msg/detail/response_status__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_api__msg__ResponseStatus__init(message_memory); +} + +void ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_fini_function(void * message_memory) +{ + unitree_api__msg__ResponseStatus__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_member_array[1] = { + { + "code", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api__msg__ResponseStatus, code), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_members = { + "unitree_api__msg", // message namespace + "ResponseStatus", // message name + 1, // number of fields + sizeof(unitree_api__msg__ResponseStatus), + ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_member_array, // message members + ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_init_function, // function to initialize message memory (memory has to be allocated) + ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_type_support_handle = { + 0, + &ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_api, msg, ResponseStatus)() { + if (!ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_type_support_handle.typesupport_identifier) { + ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &ResponseStatus__rosidl_typesupport_introspection_c__ResponseStatus_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.cpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.cpp new file mode 100644 index 0000000..69fe8f4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.cpp @@ -0,0 +1,107 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_api/msg/detail/response_status__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_api +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void ResponseStatus_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_api::msg::ResponseStatus(_init); +} + +void ResponseStatus_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~ResponseStatus(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember ResponseStatus_message_member_array[1] = { + { + "code", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_api::msg::ResponseStatus, code), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers ResponseStatus_message_members = { + "unitree_api::msg", // message namespace + "ResponseStatus", // message name + 1, // number of fields + sizeof(unitree_api::msg::ResponseStatus), + ResponseStatus_message_member_array, // message members + ResponseStatus_init_function, // function to initialize message memory (memory has to be allocated) + ResponseStatus_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t ResponseStatus_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &ResponseStatus_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_api + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::ResponseStatus_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_api, msg, ResponseStatus)() { + return &::unitree_api::msg::rosidl_typesupport_introspection_cpp::ResponseStatus_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.h new file mode 100644 index 0000000..fa14f97 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TYPE_SUPPORT_H_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_api +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_api, + msg, + ResponseStatus +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.hpp new file mode 100644 index 0000000..733b937 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/detail/response_status__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TYPE_SUPPORT_HPP_ +#define UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_api, + msg, + ResponseStatus +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__DETAIL__RESPONSE_STATUS__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.h new file mode 100644 index 0000000..49432ff --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_H_ +#define UNITREE_API__MSG__REQUEST_H_ + +#include "unitree_api/msg/detail/request__struct.h" +#include "unitree_api/msg/detail/request__functions.h" +#include "unitree_api/msg/detail/request__type_support.h" + +#endif // UNITREE_API__MSG__REQUEST_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.hpp new file mode 100644 index 0000000..f537925 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_HPP_ +#define UNITREE_API__MSG__REQUEST_HPP_ + +#include "unitree_api/msg/detail/request__struct.hpp" +#include "unitree_api/msg/detail/request__builder.hpp" +#include "unitree_api/msg/detail/request__traits.hpp" +#include "unitree_api/msg/detail/request__type_support.hpp" + +#endif // UNITREE_API__MSG__REQUEST_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.h new file mode 100644 index 0000000..db176d4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_HEADER_H_ +#define UNITREE_API__MSG__REQUEST_HEADER_H_ + +#include "unitree_api/msg/detail/request_header__struct.h" +#include "unitree_api/msg/detail/request_header__functions.h" +#include "unitree_api/msg/detail/request_header__type_support.h" + +#endif // UNITREE_API__MSG__REQUEST_HEADER_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.hpp new file mode 100644 index 0000000..e5468b2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_header.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_HEADER_HPP_ +#define UNITREE_API__MSG__REQUEST_HEADER_HPP_ + +#include "unitree_api/msg/detail/request_header__struct.hpp" +#include "unitree_api/msg/detail/request_header__builder.hpp" +#include "unitree_api/msg/detail/request_header__traits.hpp" +#include "unitree_api/msg/detail/request_header__type_support.hpp" + +#endif // UNITREE_API__MSG__REQUEST_HEADER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.h new file mode 100644 index 0000000..e818b2f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_IDENTITY_H_ +#define UNITREE_API__MSG__REQUEST_IDENTITY_H_ + +#include "unitree_api/msg/detail/request_identity__struct.h" +#include "unitree_api/msg/detail/request_identity__functions.h" +#include "unitree_api/msg/detail/request_identity__type_support.h" + +#endif // UNITREE_API__MSG__REQUEST_IDENTITY_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.hpp new file mode 100644 index 0000000..06e0041 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_identity.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_IDENTITY_HPP_ +#define UNITREE_API__MSG__REQUEST_IDENTITY_HPP_ + +#include "unitree_api/msg/detail/request_identity__struct.hpp" +#include "unitree_api/msg/detail/request_identity__builder.hpp" +#include "unitree_api/msg/detail/request_identity__traits.hpp" +#include "unitree_api/msg/detail/request_identity__type_support.hpp" + +#endif // UNITREE_API__MSG__REQUEST_IDENTITY_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.h new file mode 100644 index 0000000..5774e17 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_LEASE_H_ +#define UNITREE_API__MSG__REQUEST_LEASE_H_ + +#include "unitree_api/msg/detail/request_lease__struct.h" +#include "unitree_api/msg/detail/request_lease__functions.h" +#include "unitree_api/msg/detail/request_lease__type_support.h" + +#endif // UNITREE_API__MSG__REQUEST_LEASE_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.hpp new file mode 100644 index 0000000..9869d1a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_lease.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_LEASE_HPP_ +#define UNITREE_API__MSG__REQUEST_LEASE_HPP_ + +#include "unitree_api/msg/detail/request_lease__struct.hpp" +#include "unitree_api/msg/detail/request_lease__builder.hpp" +#include "unitree_api/msg/detail/request_lease__traits.hpp" +#include "unitree_api/msg/detail/request_lease__type_support.hpp" + +#endif // UNITREE_API__MSG__REQUEST_LEASE_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.h new file mode 100644 index 0000000..83f89ee --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_POLICY_H_ +#define UNITREE_API__MSG__REQUEST_POLICY_H_ + +#include "unitree_api/msg/detail/request_policy__struct.h" +#include "unitree_api/msg/detail/request_policy__functions.h" +#include "unitree_api/msg/detail/request_policy__type_support.h" + +#endif // UNITREE_API__MSG__REQUEST_POLICY_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.hpp new file mode 100644 index 0000000..389c475 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/request_policy.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__REQUEST_POLICY_HPP_ +#define UNITREE_API__MSG__REQUEST_POLICY_HPP_ + +#include "unitree_api/msg/detail/request_policy__struct.hpp" +#include "unitree_api/msg/detail/request_policy__builder.hpp" +#include "unitree_api/msg/detail/request_policy__traits.hpp" +#include "unitree_api/msg/detail/request_policy__type_support.hpp" + +#endif // UNITREE_API__MSG__REQUEST_POLICY_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.h new file mode 100644 index 0000000..13063dd --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__RESPONSE_H_ +#define UNITREE_API__MSG__RESPONSE_H_ + +#include "unitree_api/msg/detail/response__struct.h" +#include "unitree_api/msg/detail/response__functions.h" +#include "unitree_api/msg/detail/response__type_support.h" + +#endif // UNITREE_API__MSG__RESPONSE_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.hpp new file mode 100644 index 0000000..8af5cc9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__RESPONSE_HPP_ +#define UNITREE_API__MSG__RESPONSE_HPP_ + +#include "unitree_api/msg/detail/response__struct.hpp" +#include "unitree_api/msg/detail/response__builder.hpp" +#include "unitree_api/msg/detail/response__traits.hpp" +#include "unitree_api/msg/detail/response__type_support.hpp" + +#endif // UNITREE_API__MSG__RESPONSE_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.h new file mode 100644 index 0000000..5cba446 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__RESPONSE_HEADER_H_ +#define UNITREE_API__MSG__RESPONSE_HEADER_H_ + +#include "unitree_api/msg/detail/response_header__struct.h" +#include "unitree_api/msg/detail/response_header__functions.h" +#include "unitree_api/msg/detail/response_header__type_support.h" + +#endif // UNITREE_API__MSG__RESPONSE_HEADER_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.hpp new file mode 100644 index 0000000..3115d6c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_header.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__RESPONSE_HEADER_HPP_ +#define UNITREE_API__MSG__RESPONSE_HEADER_HPP_ + +#include "unitree_api/msg/detail/response_header__struct.hpp" +#include "unitree_api/msg/detail/response_header__builder.hpp" +#include "unitree_api/msg/detail/response_header__traits.hpp" +#include "unitree_api/msg/detail/response_header__type_support.hpp" + +#endif // UNITREE_API__MSG__RESPONSE_HEADER_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.h new file mode 100644 index 0000000..b01030c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__RESPONSE_STATUS_H_ +#define UNITREE_API__MSG__RESPONSE_STATUS_H_ + +#include "unitree_api/msg/detail/response_status__struct.h" +#include "unitree_api/msg/detail/response_status__functions.h" +#include "unitree_api/msg/detail/response_status__type_support.h" + +#endif // UNITREE_API__MSG__RESPONSE_STATUS_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.hpp new file mode 100644 index 0000000..4e59390 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/response_status.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__RESPONSE_STATUS_HPP_ +#define UNITREE_API__MSG__RESPONSE_STATUS_HPP_ + +#include "unitree_api/msg/detail/response_status__struct.hpp" +#include "unitree_api/msg/detail/response_status__builder.hpp" +#include "unitree_api/msg/detail/response_status__traits.hpp" +#include "unitree_api/msg/detail/response_status__type_support.hpp" + +#endif // UNITREE_API__MSG__RESPONSE_STATUS_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_c__visibility_control.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_c__visibility_control.h new file mode 100644 index 0000000..c3f4c94 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_c__visibility_control.h @@ -0,0 +1,42 @@ +// generated from rosidl_generator_c/resource/rosidl_generator_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ +#define UNITREE_API__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_GENERATOR_C_EXPORT_unitree_api __attribute__ ((dllexport)) + #define ROSIDL_GENERATOR_C_IMPORT_unitree_api __attribute__ ((dllimport)) + #else + #define ROSIDL_GENERATOR_C_EXPORT_unitree_api __declspec(dllexport) + #define ROSIDL_GENERATOR_C_IMPORT_unitree_api __declspec(dllimport) + #endif + #ifdef ROSIDL_GENERATOR_C_BUILDING_DLL_unitree_api + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_api ROSIDL_GENERATOR_C_EXPORT_unitree_api + #else + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_api ROSIDL_GENERATOR_C_IMPORT_unitree_api + #endif +#else + #define ROSIDL_GENERATOR_C_EXPORT_unitree_api __attribute__ ((visibility("default"))) + #define ROSIDL_GENERATOR_C_IMPORT_unitree_api + #if __GNUC__ >= 4 + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_api __attribute__ ((visibility("default"))) + #else + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_api + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp new file mode 100644 index 0000000..6444c9a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_generator_cpp__visibility_control.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/rosidl_generator_cpp__visibility_control.hpp.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_ +#define UNITREE_API__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_GENERATOR_CPP_EXPORT_unitree_api __attribute__ ((dllexport)) + #define ROSIDL_GENERATOR_CPP_IMPORT_unitree_api __attribute__ ((dllimport)) + #else + #define ROSIDL_GENERATOR_CPP_EXPORT_unitree_api __declspec(dllexport) + #define ROSIDL_GENERATOR_CPP_IMPORT_unitree_api __declspec(dllimport) + #endif + #ifdef ROSIDL_GENERATOR_CPP_BUILDING_DLL_unitree_api + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api ROSIDL_GENERATOR_CPP_EXPORT_unitree_api + #else + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api ROSIDL_GENERATOR_CPP_IMPORT_unitree_api + #endif +#else + #define ROSIDL_GENERATOR_CPP_EXPORT_unitree_api __attribute__ ((visibility("default"))) + #define ROSIDL_GENERATOR_CPP_IMPORT_unitree_api + #if __GNUC__ >= 4 + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api __attribute__ ((visibility("default"))) + #else + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_api + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h new file mode 100644 index 0000000..d8ec81c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_c__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_fastrtps_c/resource/rosidl_typesupport_fastrtps_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ +#define UNITREE_API__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ + +#if __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_api __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_api __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_api __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_api __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_C_BUILDING_DLL_unitree_api + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_api + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_api + #endif +#else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_api __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_api + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_api + #endif +#endif + +#if __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h new file mode 100644 index 0000000..d43fdba --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_fastrtps_cpp/resource/rosidl_typesupport_fastrtps_cpp__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ +#define UNITREE_API__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ + +#if __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_api __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_api __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_api __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_api __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_CPP_BUILDING_DLL_unitree_api + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_api + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_api + #endif +#else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_api __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_api + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_api + #endif +#endif + +#if __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h new file mode 100644 index 0000000..22bb9fc --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/include/unitree_api/msg/rosidl_typesupport_introspection_c__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_introspection_c/resource/rosidl_typesupport_introspection_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_API__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ +#define UNITREE_API__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_api __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_api __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_INTROSPECTION_C_BUILDING_DLL_unitree_api + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_api + #endif +#else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_api __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_api + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_api + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_API__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/__init__.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/__init__.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/__init__.py new file mode 100644 index 0000000..d9c8f06 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/__init__.py @@ -0,0 +1,8 @@ +from unitree_api.msg._request import Request # noqa: F401 +from unitree_api.msg._request_header import RequestHeader # noqa: F401 +from unitree_api.msg._request_identity import RequestIdentity # noqa: F401 +from unitree_api.msg._request_lease import RequestLease # noqa: F401 +from unitree_api.msg._request_policy import RequestPolicy # noqa: F401 +from unitree_api.msg._response import Response # noqa: F401 +from unitree_api.msg._response_header import ResponseHeader # noqa: F401 +from unitree_api.msg._response_status import ResponseStatus # noqa: F401 diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request.py new file mode 100644 index 0000000..07b2141 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request.py @@ -0,0 +1,184 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/Request.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'binary' +import array # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Request(type): + """Metaclass of message 'Request'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.Request') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__request + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__request + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__request + cls._TYPE_SUPPORT = module.type_support_msg__msg__request + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__request + + from unitree_api.msg import RequestHeader + if RequestHeader.__class__._TYPE_SUPPORT is None: + RequestHeader.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Request(metaclass=Metaclass_Request): + """Message class 'Request'.""" + + __slots__ = [ + '_header', + '_parameter', + '_binary', + ] + + _fields_and_field_types = { + 'header': 'unitree_api/RequestHeader', + 'parameter': 'string', + 'binary': 'sequence', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'RequestHeader'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('uint8')), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from unitree_api.msg import RequestHeader + self.header = kwargs.get('header', RequestHeader()) + self.parameter = kwargs.get('parameter', str()) + self.binary = array.array('B', kwargs.get('binary', [])) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.parameter != other.parameter: + return False + if self.binary != other.binary: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from unitree_api.msg import RequestHeader + assert \ + isinstance(value, RequestHeader), \ + "The 'header' field must be a sub message of type 'RequestHeader'" + self._header = value + + @property + def parameter(self): + """Message field 'parameter'.""" + return self._parameter + + @parameter.setter + def parameter(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'parameter' field must be of type 'str'" + self._parameter = value + + @property + def binary(self): + """Message field 'binary'.""" + return self._binary + + @binary.setter + def binary(self, value): + if isinstance(value, array.array): + assert value.typecode == 'B', \ + "The 'binary' array.array() must have the type code of 'B'" + self._binary = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'binary' field must be a set or sequence and each value of type 'int' and each unsigned integer in [0, 255]" + self._binary = array.array('B', value) diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header.py new file mode 100644 index 0000000..a1c597d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header.py @@ -0,0 +1,178 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/RequestHeader.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_RequestHeader(type): + """Metaclass of message 'RequestHeader'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.RequestHeader') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__request_header + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__request_header + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__request_header + cls._TYPE_SUPPORT = module.type_support_msg__msg__request_header + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__request_header + + from unitree_api.msg import RequestIdentity + if RequestIdentity.__class__._TYPE_SUPPORT is None: + RequestIdentity.__class__.__import_type_support__() + + from unitree_api.msg import RequestLease + if RequestLease.__class__._TYPE_SUPPORT is None: + RequestLease.__class__.__import_type_support__() + + from unitree_api.msg import RequestPolicy + if RequestPolicy.__class__._TYPE_SUPPORT is None: + RequestPolicy.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class RequestHeader(metaclass=Metaclass_RequestHeader): + """Message class 'RequestHeader'.""" + + __slots__ = [ + '_identity', + '_lease', + '_policy', + ] + + _fields_and_field_types = { + 'identity': 'unitree_api/RequestIdentity', + 'lease': 'unitree_api/RequestLease', + 'policy': 'unitree_api/RequestPolicy', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'RequestIdentity'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'RequestLease'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'RequestPolicy'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from unitree_api.msg import RequestIdentity + self.identity = kwargs.get('identity', RequestIdentity()) + from unitree_api.msg import RequestLease + self.lease = kwargs.get('lease', RequestLease()) + from unitree_api.msg import RequestPolicy + self.policy = kwargs.get('policy', RequestPolicy()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.identity != other.identity: + return False + if self.lease != other.lease: + return False + if self.policy != other.policy: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def identity(self): + """Message field 'identity'.""" + return self._identity + + @identity.setter + def identity(self, value): + if __debug__: + from unitree_api.msg import RequestIdentity + assert \ + isinstance(value, RequestIdentity), \ + "The 'identity' field must be a sub message of type 'RequestIdentity'" + self._identity = value + + @property + def lease(self): + """Message field 'lease'.""" + return self._lease + + @lease.setter + def lease(self, value): + if __debug__: + from unitree_api.msg import RequestLease + assert \ + isinstance(value, RequestLease), \ + "The 'lease' field must be a sub message of type 'RequestLease'" + self._lease = value + + @property + def policy(self): + """Message field 'policy'.""" + return self._policy + + @policy.setter + def policy(self, value): + if __debug__: + from unitree_api.msg import RequestPolicy + assert \ + isinstance(value, RequestPolicy), \ + "The 'policy' field must be a sub message of type 'RequestPolicy'" + self._policy = value diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header_s.c new file mode 100644 index 0000000..f9a2173 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_header_s.c @@ -0,0 +1,159 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/request_header__struct.h" +#include "unitree_api/msg/detail/request_header__functions.h" + +bool unitree_api__msg__request_identity__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__request_identity__convert_to_py(void * raw_ros_message); +bool unitree_api__msg__request_lease__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__request_lease__convert_to_py(void * raw_ros_message); +bool unitree_api__msg__request_policy__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__request_policy__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__request_header__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[46]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._request_header.RequestHeader", full_classname_dest, 45) == 0); + } + unitree_api__msg__RequestHeader * ros_message = _ros_message; + { // identity + PyObject * field = PyObject_GetAttrString(_pymsg, "identity"); + if (!field) { + return false; + } + if (!unitree_api__msg__request_identity__convert_from_py(field, &ros_message->identity)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // lease + PyObject * field = PyObject_GetAttrString(_pymsg, "lease"); + if (!field) { + return false; + } + if (!unitree_api__msg__request_lease__convert_from_py(field, &ros_message->lease)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // policy + PyObject * field = PyObject_GetAttrString(_pymsg, "policy"); + if (!field) { + return false; + } + if (!unitree_api__msg__request_policy__convert_from_py(field, &ros_message->policy)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__request_header__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of RequestHeader */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._request_header"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "RequestHeader"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__RequestHeader * ros_message = (unitree_api__msg__RequestHeader *)raw_ros_message; + { // identity + PyObject * field = NULL; + field = unitree_api__msg__request_identity__convert_to_py(&ros_message->identity); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "identity", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // lease + PyObject * field = NULL; + field = unitree_api__msg__request_lease__convert_to_py(&ros_message->lease); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "lease", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // policy + PyObject * field = NULL; + field = unitree_api__msg__request_policy__convert_to_py(&ros_message->policy); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "policy", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity.py new file mode 100644 index 0000000..77d5a90 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity.py @@ -0,0 +1,145 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/RequestIdentity.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_RequestIdentity(type): + """Metaclass of message 'RequestIdentity'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.RequestIdentity') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__request_identity + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__request_identity + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__request_identity + cls._TYPE_SUPPORT = module.type_support_msg__msg__request_identity + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__request_identity + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class RequestIdentity(metaclass=Metaclass_RequestIdentity): + """Message class 'RequestIdentity'.""" + + __slots__ = [ + '_id', + '_api_id', + ] + + _fields_and_field_types = { + 'id': 'int64', + 'api_id': 'int64', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('int64'), # noqa: E501 + rosidl_parser.definition.BasicType('int64'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.id = kwargs.get('id', int()) + self.api_id = kwargs.get('api_id', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.id != other.id: + return False + if self.api_id != other.api_id: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property # noqa: A003 + def id(self): # noqa: A003 + """Message field 'id'.""" + return self._id + + @id.setter # noqa: A003 + def id(self, value): # noqa: A003 + if __debug__: + assert \ + isinstance(value, int), \ + "The 'id' field must be of type 'int'" + assert value >= -9223372036854775808 and value < 9223372036854775808, \ + "The 'id' field must be an integer in [-9223372036854775808, 9223372036854775807]" + self._id = value + + @property + def api_id(self): + """Message field 'api_id'.""" + return self._api_id + + @api_id.setter + def api_id(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'api_id' field must be of type 'int'" + assert value >= -9223372036854775808 and value < 9223372036854775808, \ + "The 'api_id' field must be an integer in [-9223372036854775808, 9223372036854775807]" + self._api_id = value diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity_s.c new file mode 100644 index 0000000..ac38d5d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_identity_s.c @@ -0,0 +1,118 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/request_identity__struct.h" +#include "unitree_api/msg/detail/request_identity__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__request_identity__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[50]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._request_identity.RequestIdentity", full_classname_dest, 49) == 0); + } + unitree_api__msg__RequestIdentity * ros_message = _ros_message; + { // id + PyObject * field = PyObject_GetAttrString(_pymsg, "id"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->id = PyLong_AsLongLong(field); + Py_DECREF(field); + } + { // api_id + PyObject * field = PyObject_GetAttrString(_pymsg, "api_id"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->api_id = PyLong_AsLongLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__request_identity__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of RequestIdentity */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._request_identity"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "RequestIdentity"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__RequestIdentity * ros_message = (unitree_api__msg__RequestIdentity *)raw_ros_message; + { // id + PyObject * field = NULL; + field = PyLong_FromLongLong(ros_message->id); + { + int rc = PyObject_SetAttrString(_pymessage, "id", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // api_id + PyObject * field = NULL; + field = PyLong_FromLongLong(ros_message->api_id); + { + int rc = PyObject_SetAttrString(_pymessage, "api_id", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease.py new file mode 100644 index 0000000..016cba8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease.py @@ -0,0 +1,124 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/RequestLease.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_RequestLease(type): + """Metaclass of message 'RequestLease'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.RequestLease') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__request_lease + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__request_lease + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__request_lease + cls._TYPE_SUPPORT = module.type_support_msg__msg__request_lease + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__request_lease + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class RequestLease(metaclass=Metaclass_RequestLease): + """Message class 'RequestLease'.""" + + __slots__ = [ + '_id', + ] + + _fields_and_field_types = { + 'id': 'int64', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('int64'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.id = kwargs.get('id', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.id != other.id: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property # noqa: A003 + def id(self): # noqa: A003 + """Message field 'id'.""" + return self._id + + @id.setter # noqa: A003 + def id(self, value): # noqa: A003 + if __debug__: + assert \ + isinstance(value, int), \ + "The 'id' field must be of type 'int'" + assert value >= -9223372036854775808 and value < 9223372036854775808, \ + "The 'id' field must be an integer in [-9223372036854775808, 9223372036854775807]" + self._id = value diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease_s.c new file mode 100644 index 0000000..a98c137 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_lease_s.c @@ -0,0 +1,98 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/request_lease__struct.h" +#include "unitree_api/msg/detail/request_lease__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__request_lease__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[44]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._request_lease.RequestLease", full_classname_dest, 43) == 0); + } + unitree_api__msg__RequestLease * ros_message = _ros_message; + { // id + PyObject * field = PyObject_GetAttrString(_pymsg, "id"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->id = PyLong_AsLongLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__request_lease__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of RequestLease */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._request_lease"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "RequestLease"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__RequestLease * ros_message = (unitree_api__msg__RequestLease *)raw_ros_message; + { // id + PyObject * field = NULL; + field = PyLong_FromLongLong(ros_message->id); + { + int rc = PyObject_SetAttrString(_pymessage, "id", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy.py new file mode 100644 index 0000000..97a0331 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy.py @@ -0,0 +1,143 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/RequestPolicy.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_RequestPolicy(type): + """Metaclass of message 'RequestPolicy'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.RequestPolicy') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__request_policy + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__request_policy + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__request_policy + cls._TYPE_SUPPORT = module.type_support_msg__msg__request_policy + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__request_policy + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class RequestPolicy(metaclass=Metaclass_RequestPolicy): + """Message class 'RequestPolicy'.""" + + __slots__ = [ + '_priority', + '_noreply', + ] + + _fields_and_field_types = { + 'priority': 'int32', + 'noreply': 'boolean', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('int32'), # noqa: E501 + rosidl_parser.definition.BasicType('boolean'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.priority = kwargs.get('priority', int()) + self.noreply = kwargs.get('noreply', bool()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.priority != other.priority: + return False + if self.noreply != other.noreply: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def priority(self): + """Message field 'priority'.""" + return self._priority + + @priority.setter + def priority(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'priority' field must be of type 'int'" + assert value >= -2147483648 and value < 2147483648, \ + "The 'priority' field must be an integer in [-2147483648, 2147483647]" + self._priority = value + + @property + def noreply(self): + """Message field 'noreply'.""" + return self._noreply + + @noreply.setter + def noreply(self, value): + if __debug__: + assert \ + isinstance(value, bool), \ + "The 'noreply' field must be of type 'bool'" + self._noreply = value diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy_s.c new file mode 100644 index 0000000..ab38a3a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_policy_s.c @@ -0,0 +1,118 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/request_policy__struct.h" +#include "unitree_api/msg/detail/request_policy__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__request_policy__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[46]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._request_policy.RequestPolicy", full_classname_dest, 45) == 0); + } + unitree_api__msg__RequestPolicy * ros_message = _ros_message; + { // priority + PyObject * field = PyObject_GetAttrString(_pymsg, "priority"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->priority = (int32_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // noreply + PyObject * field = PyObject_GetAttrString(_pymsg, "noreply"); + if (!field) { + return false; + } + assert(PyBool_Check(field)); + ros_message->noreply = (Py_True == field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__request_policy__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of RequestPolicy */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._request_policy"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "RequestPolicy"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__RequestPolicy * ros_message = (unitree_api__msg__RequestPolicy *)raw_ros_message; + { // priority + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->priority); + { + int rc = PyObject_SetAttrString(_pymessage, "priority", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // noreply + PyObject * field = NULL; + field = PyBool_FromLong(ros_message->noreply ? 1 : 0); + { + int rc = PyObject_SetAttrString(_pymessage, "noreply", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_s.c new file mode 100644 index 0000000..9212cde --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_request_s.c @@ -0,0 +1,263 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/request__struct.h" +#include "unitree_api/msg/detail/request__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool unitree_api__msg__request_header__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__request_header__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__request__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[33]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._request.Request", full_classname_dest, 32) == 0); + } + unitree_api__msg__Request * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!unitree_api__msg__request_header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // parameter + PyObject * field = PyObject_GetAttrString(_pymsg, "parameter"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->parameter, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // binary + PyObject * field = PyObject_GetAttrString(_pymsg, "binary"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(uint8_t); + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->binary), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->binary.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'binary'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->binary), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->binary.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + uint8_t tmp = (uint8_t)PyLong_AsUnsignedLong(item); + + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__request__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Request */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._request"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Request"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__Request * ros_message = (unitree_api__msg__Request *)raw_ros_message; + { // header + PyObject * field = NULL; + field = unitree_api__msg__request_header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // parameter + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->parameter.data, + strlen(ros_message->parameter.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "parameter", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // binary + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "binary"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(uint8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->binary.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + uint8_t * src = &(ros_message->binary.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->binary.size * sizeof(uint8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response.py new file mode 100644 index 0000000..cf6a415 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response.py @@ -0,0 +1,184 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/Response.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'binary' +import array # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Response(type): + """Metaclass of message 'Response'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.Response') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__response + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__response + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__response + cls._TYPE_SUPPORT = module.type_support_msg__msg__response + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__response + + from unitree_api.msg import ResponseHeader + if ResponseHeader.__class__._TYPE_SUPPORT is None: + ResponseHeader.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Response(metaclass=Metaclass_Response): + """Message class 'Response'.""" + + __slots__ = [ + '_header', + '_data', + '_binary', + ] + + _fields_and_field_types = { + 'header': 'unitree_api/ResponseHeader', + 'data': 'string', + 'binary': 'sequence', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'ResponseHeader'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('int8')), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from unitree_api.msg import ResponseHeader + self.header = kwargs.get('header', ResponseHeader()) + self.data = kwargs.get('data', str()) + self.binary = array.array('b', kwargs.get('binary', [])) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.header != other.header: + return False + if self.data != other.data: + return False + if self.binary != other.binary: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def header(self): + """Message field 'header'.""" + return self._header + + @header.setter + def header(self, value): + if __debug__: + from unitree_api.msg import ResponseHeader + assert \ + isinstance(value, ResponseHeader), \ + "The 'header' field must be a sub message of type 'ResponseHeader'" + self._header = value + + @property + def data(self): + """Message field 'data'.""" + return self._data + + @data.setter + def data(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'data' field must be of type 'str'" + self._data = value + + @property + def binary(self): + """Message field 'binary'.""" + return self._binary + + @binary.setter + def binary(self, value): + if isinstance(value, array.array): + assert value.typecode == 'b', \ + "The 'binary' array.array() must have the type code of 'b'" + self._binary = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= -128 and val < 128 for val in value)), \ + "The 'binary' field must be a set or sequence and each value of type 'int' and each integer in [-128, 127]" + self._binary = array.array('b', value) diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header.py new file mode 100644 index 0000000..c39b64b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header.py @@ -0,0 +1,153 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/ResponseHeader.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_ResponseHeader(type): + """Metaclass of message 'ResponseHeader'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.ResponseHeader') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__response_header + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__response_header + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__response_header + cls._TYPE_SUPPORT = module.type_support_msg__msg__response_header + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__response_header + + from unitree_api.msg import RequestIdentity + if RequestIdentity.__class__._TYPE_SUPPORT is None: + RequestIdentity.__class__.__import_type_support__() + + from unitree_api.msg import ResponseStatus + if ResponseStatus.__class__._TYPE_SUPPORT is None: + ResponseStatus.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class ResponseHeader(metaclass=Metaclass_ResponseHeader): + """Message class 'ResponseHeader'.""" + + __slots__ = [ + '_identity', + '_status', + ] + + _fields_and_field_types = { + 'identity': 'unitree_api/RequestIdentity', + 'status': 'unitree_api/ResponseStatus', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'RequestIdentity'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_api', 'msg'], 'ResponseStatus'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from unitree_api.msg import RequestIdentity + self.identity = kwargs.get('identity', RequestIdentity()) + from unitree_api.msg import ResponseStatus + self.status = kwargs.get('status', ResponseStatus()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.identity != other.identity: + return False + if self.status != other.status: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def identity(self): + """Message field 'identity'.""" + return self._identity + + @identity.setter + def identity(self, value): + if __debug__: + from unitree_api.msg import RequestIdentity + assert \ + isinstance(value, RequestIdentity), \ + "The 'identity' field must be a sub message of type 'RequestIdentity'" + self._identity = value + + @property + def status(self): + """Message field 'status'.""" + return self._status + + @status.setter + def status(self, value): + if __debug__: + from unitree_api.msg import ResponseStatus + assert \ + isinstance(value, ResponseStatus), \ + "The 'status' field must be a sub message of type 'ResponseStatus'" + self._status = value diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header_s.c new file mode 100644 index 0000000..7201b0b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_header_s.c @@ -0,0 +1,132 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/response_header__struct.h" +#include "unitree_api/msg/detail/response_header__functions.h" + +bool unitree_api__msg__request_identity__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__request_identity__convert_to_py(void * raw_ros_message); +bool unitree_api__msg__response_status__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__response_status__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__response_header__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[48]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._response_header.ResponseHeader", full_classname_dest, 47) == 0); + } + unitree_api__msg__ResponseHeader * ros_message = _ros_message; + { // identity + PyObject * field = PyObject_GetAttrString(_pymsg, "identity"); + if (!field) { + return false; + } + if (!unitree_api__msg__request_identity__convert_from_py(field, &ros_message->identity)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // status + PyObject * field = PyObject_GetAttrString(_pymsg, "status"); + if (!field) { + return false; + } + if (!unitree_api__msg__response_status__convert_from_py(field, &ros_message->status)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__response_header__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of ResponseHeader */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._response_header"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "ResponseHeader"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__ResponseHeader * ros_message = (unitree_api__msg__ResponseHeader *)raw_ros_message; + { // identity + PyObject * field = NULL; + field = unitree_api__msg__request_identity__convert_to_py(&ros_message->identity); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "identity", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // status + PyObject * field = NULL; + field = unitree_api__msg__response_status__convert_to_py(&ros_message->status); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "status", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_s.c new file mode 100644 index 0000000..9798e13 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_s.c @@ -0,0 +1,262 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/response__struct.h" +#include "unitree_api/msg/detail/response__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool unitree_api__msg__response_header__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_api__msg__response_header__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__response__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._response.Response", full_classname_dest, 34) == 0); + } + unitree_api__msg__Response * ros_message = _ros_message; + { // header + PyObject * field = PyObject_GetAttrString(_pymsg, "header"); + if (!field) { + return false; + } + if (!unitree_api__msg__response_header__convert_from_py(field, &ros_message->header)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // data + PyObject * field = PyObject_GetAttrString(_pymsg, "data"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->data, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // binary + PyObject * field = PyObject_GetAttrString(_pymsg, "binary"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(int8_t); + if (!rosidl_runtime_c__int8__Sequence__init(&(ros_message->binary), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create int8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + int8_t * dest = ros_message->binary.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'binary'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__int8__Sequence__init(&(ros_message->binary), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create int8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + int8_t * dest = ros_message->binary.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + int8_t tmp = (int8_t)PyLong_AsLong(item); + memcpy(&dest[i], &tmp, sizeof(int8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__response__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Response */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._response"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Response"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__Response * ros_message = (unitree_api__msg__Response *)raw_ros_message; + { // header + PyObject * field = NULL; + field = unitree_api__msg__response_header__convert_to_py(&ros_message->header); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "header", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // data + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->data.data, + strlen(ros_message->data.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "data", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // binary + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "binary"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(int8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->binary.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + int8_t * src = &(ros_message->binary.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->binary.size * sizeof(int8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status.py b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status.py new file mode 100644 index 0000000..a8dd87f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status.py @@ -0,0 +1,124 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_api:msg/ResponseStatus.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_ResponseStatus(type): + """Metaclass of message 'ResponseStatus'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_api') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_api.msg.ResponseStatus') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__response_status + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__response_status + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__response_status + cls._TYPE_SUPPORT = module.type_support_msg__msg__response_status + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__response_status + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class ResponseStatus(metaclass=Metaclass_ResponseStatus): + """Message class 'ResponseStatus'.""" + + __slots__ = [ + '_code', + ] + + _fields_and_field_types = { + 'code': 'int32', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('int32'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.code = kwargs.get('code', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.code != other.code: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def code(self): + """Message field 'code'.""" + return self._code + + @code.setter + def code(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'code' field must be of type 'int'" + assert value >= -2147483648 and value < 2147483648, \ + "The 'code' field must be an integer in [-2147483648, 2147483647]" + self._code = value diff --git a/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status_s.c b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status_s.c new file mode 100644 index 0000000..6a9497c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/lib/python3.8/site-packages/unitree_api/msg/_response_status_s.c @@ -0,0 +1,98 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_api/msg/detail/response_status__struct.h" +#include "unitree_api/msg/detail/response_status__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_api__msg__response_status__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[48]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_api.msg._response_status.ResponseStatus", full_classname_dest, 47) == 0); + } + unitree_api__msg__ResponseStatus * ros_message = _ros_message; + { // code + PyObject * field = PyObject_GetAttrString(_pymsg, "code"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->code = (int32_t)PyLong_AsLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_api__msg__response_status__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of ResponseStatus */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_api.msg._response_status"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "ResponseStatus"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_api__msg__ResponseStatus * ros_message = (unitree_api__msg__ResponseStatus *)raw_ros_message; + { // code + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->code); + { + int rc = PyObject_SetAttrString(_pymessage, "code", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/package_run_dependencies/unitree_api b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/package_run_dependencies/unitree_api new file mode 100644 index 0000000..cabffa8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/package_run_dependencies/unitree_api @@ -0,0 +1 @@ +geometry_msgs;rosidl_default_runtime;ament_lint_auto;ament_lint_common \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/packages/unitree_api b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/packages/unitree_api new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/parent_prefix_path/unitree_api b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/parent_prefix_path/unitree_api new file mode 100644 index 0000000..e053138 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/parent_prefix_path/unitree_api @@ -0,0 +1 @@ +/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/go2py_node:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_go:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_api:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/hesai_ros_driver:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/unitree_go:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/unitree_api:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/rmw_cyclonedds_cpp:/opt/ros/foxy \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/rosidl_interfaces/unitree_api b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/rosidl_interfaces/unitree_api new file mode 100644 index 0000000..cf70eec --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/ament_index/resource_index/rosidl_interfaces/unitree_api @@ -0,0 +1,16 @@ +msg/Request.idl +msg/Request.msg +msg/RequestHeader.idl +msg/RequestHeader.msg +msg/RequestIdentity.idl +msg/RequestIdentity.msg +msg/RequestLease.idl +msg/RequestLease.msg +msg/RequestPolicy.idl +msg/RequestPolicy.msg +msg/Response.idl +msg/Response.msg +msg/ResponseHeader.idl +msg/ResponseHeader.msg +msg/ResponseStatus.idl +msg/ResponseStatus.msg \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/colcon-core/packages/unitree_api b/deploy/robot_ws/install/unitree_api/share/colcon-core/packages/unitree_api new file mode 100644 index 0000000..c819a81 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/colcon-core/packages/unitree_api @@ -0,0 +1 @@ +geometry_msgs:rosidl_default_runtime \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_dependencies-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_dependencies-extras.cmake new file mode 100644 index 0000000..728a66a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_dependencies-extras.cmake @@ -0,0 +1,92 @@ +# generated from ament_cmake_export_dependencies/cmake/ament_cmake_export_dependencies-extras.cmake.in + +set(_exported_dependencies "geometry_msgs;geometry_msgs;std_msgs;builtin_interfaces;rosidl_runtime_c;rosidl_typesupport_interface;geometry_msgs;std_msgs;builtin_interfaces;geometry_msgs;std_msgs;builtin_interfaces") + +find_package(ament_cmake_libraries QUIET REQUIRED) + +# find_package() all dependencies +# and append their DEFINITIONS INCLUDE_DIRS, LIBRARIES, and LINK_FLAGS +# variables to unitree_api_DEFINITIONS, unitree_api_INCLUDE_DIRS, +# unitree_api_LIBRARIES, and unitree_api_LINK_FLAGS. +# Additionally collect the direct dependency names in +# unitree_api_DEPENDENCIES as well as the recursive dependency names +# in unitree_api_RECURSIVE_DEPENDENCIES. +if(NOT _exported_dependencies STREQUAL "") + find_package(ament_cmake_core QUIET REQUIRED) + set(unitree_api_DEPENDENCIES ${_exported_dependencies}) + set(unitree_api_RECURSIVE_DEPENDENCIES ${_exported_dependencies}) + set(_libraries) + foreach(_dep ${_exported_dependencies}) + if(NOT ${_dep}_FOUND) + find_package("${_dep}" QUIET REQUIRED) + endif() + # if a package provides modern CMake interface targets use them + # exclusively assuming the classic CMake variables only exist for + # backward compatibility + set(use_modern_cmake FALSE) + if(NOT "${${_dep}_TARGETS}" STREQUAL "") + foreach(_target ${${_dep}_TARGETS}) + # only use actual targets + # in case a package uses this variable for other content + if(TARGET "${_target}") + get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES) + if(_include_dirs) + list_append_unique(unitree_api_INCLUDE_DIRS "${_include_dirs}") + endif() + + get_target_property(_imported_configurations ${_target} IMPORTED_CONFIGURATIONS) + if(_imported_configurations) + string(TOUPPER "${_imported_configurations}" _imported_configurations) + if(DEBUG_CONFIGURATIONS) + string(TOUPPER "${DEBUG_CONFIGURATIONS}" _debug_configurations_uppercase) + else() + set(_debug_configurations_uppercase "DEBUG") + endif() + foreach(_imported_config ${_imported_configurations}) + get_target_property(_imported_implib ${_target} IMPORTED_IMPLIB_${_imported_config}) + if(_imported_implib) + set(_imported_implib_config "optimized") + if(${_imported_config} IN_LIST _debug_configurations_uppercase) + set(_imported_implib_config "debug") + endif() + list(APPEND _libraries ${_imported_implib_config} ${_imported_implib}) + else() + get_target_property(_imported_location ${_target} IMPORTED_LOCATION_${_imported_config}) + if(_imported_location) + list(APPEND _libraries "${_imported_location}") + endif() + endif() + endforeach() + endif() + + get_target_property(_link_libraries ${_target} INTERFACE_LINK_LIBRARIES) + if(_link_libraries) + list(APPEND _libraries "${_link_libraries}") + endif() + set(use_modern_cmake TRUE) + endif() + endforeach() + endif() + if(NOT use_modern_cmake) + if(${_dep}_DEFINITIONS) + list_append_unique(unitree_api_DEFINITIONS "${${_dep}_DEFINITIONS}") + endif() + if(${_dep}_INCLUDE_DIRS) + list_append_unique(unitree_api_INCLUDE_DIRS "${${_dep}_INCLUDE_DIRS}") + endif() + if(${_dep}_LIBRARIES) + list(APPEND _libraries "${${_dep}_LIBRARIES}") + endif() + if(${_dep}_LINK_FLAGS) + list_append_unique(unitree_api_LINK_FLAGS "${${_dep}_LINK_FLAGS}") + endif() + if(${_dep}_RECURSIVE_DEPENDENCIES) + list_append_unique(unitree_api_RECURSIVE_DEPENDENCIES "${${_dep}_RECURSIVE_DEPENDENCIES}") + endif() + endif() + if(_libraries) + ament_libraries_deduplicate(_libraries "${_libraries}") + list(APPEND unitree_api_LIBRARIES "${_libraries}") + endif() + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_include_directories-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_include_directories-extras.cmake new file mode 100644 index 0000000..a8069fa --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_include_directories-extras.cmake @@ -0,0 +1,16 @@ +# generated from ament_cmake_export_include_directories/cmake/ament_cmake_export_include_directories-extras.cmake.in + +set(_exported_include_dirs "${unitree_api_DIR}/../../../include") + +# append include directories to unitree_api_INCLUDE_DIRS +# warn about not existing paths +if(NOT _exported_include_dirs STREQUAL "") + find_package(ament_cmake_core QUIET REQUIRED) + foreach(_exported_include_dir ${_exported_include_dirs}) + if(NOT IS_DIRECTORY "${_exported_include_dir}") + message(WARNING "Package 'unitree_api' exports the include directory '${_exported_include_dir}' which doesn't exist") + endif() + normalize_path(_exported_include_dir "${_exported_include_dir}") + list(APPEND unitree_api_INCLUDE_DIRS "${_exported_include_dir}") + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_libraries-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_libraries-extras.cmake new file mode 100644 index 0000000..d514da4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_libraries-extras.cmake @@ -0,0 +1,140 @@ +# generated from ament_cmake_export_libraries/cmake/template/ament_cmake_export_libraries.cmake.in + +set(_exported_libraries "unitree_api__rosidl_generator_c;unitree_api__rosidl_typesupport_c;unitree_api__rosidl_typesupport_cpp") +set(_exported_library_names "") + +# populate unitree_api_LIBRARIES +if(NOT _exported_libraries STREQUAL "") + # loop over libraries, either target names or absolute paths + list(LENGTH _exported_libraries _length) + set(_i 0) + while(_i LESS _length) + list(GET _exported_libraries ${_i} _arg) + + # pass linker flags along + if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") + list(APPEND unitree_api_LIBRARIES "${_arg}") + math(EXPR _i "${_i} + 1") + continue() + endif() + + if("${_arg}" MATCHES "^(debug|optimized|general)$") + # remember build configuration keyword + # and get following library + set(_cfg "${_arg}") + math(EXPR _i "${_i} + 1") + if(_i EQUAL _length) + message(FATAL_ERROR "Package 'unitree_api' passes the build configuration keyword '${_cfg}' as the last exported library") + endif() + list(GET _exported_libraries ${_i} _library) + else() + # the value is a library without a build configuration keyword + set(_cfg "") + set(_library "${_arg}") + endif() + math(EXPR _i "${_i} + 1") + + if(NOT IS_ABSOLUTE "${_library}") + # search for library target relative to this CMake file + set(_lib "NOTFOUND") + find_library( + _lib NAMES "${_library}" + PATHS "${unitree_api_DIR}/../../../lib" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + if(NOT _lib) + # warn about not existing library and ignore it + message(FATAL_ERROR "Package 'unitree_api' exports the library '${_library}' which couldn't be found") + elseif(NOT IS_ABSOLUTE "${_lib}") + # the found library must be an absolute path + message(FATAL_ERROR "Package 'unitree_api' found the library '${_library}' at '${_lib}' which is not an absolute path") + elseif(NOT EXISTS "${_lib}") + # the found library must exist + message(FATAL_ERROR "Package 'unitree_api' found the library '${_lib}' which doesn't exist") + else() + list(APPEND unitree_api_LIBRARIES ${_cfg} "${_lib}") + endif() + + else() + if(NOT EXISTS "${_library}") + # the found library must exist + message(WARNING "Package 'unitree_api' exports the library '${_library}' which doesn't exist") + else() + list(APPEND unitree_api_LIBRARIES ${_cfg} "${_library}") + endif() + endif() + endwhile() +endif() + +# find_library() library names with optional LIBRARY_DIRS +# and add the libraries to unitree_api_LIBRARIES +if(NOT _exported_library_names STREQUAL "") + # loop over library names + # but remember related build configuration keyword if available + list(LENGTH _exported_library_names _length) + set(_i 0) + while(_i LESS _length) + list(GET _exported_library_names ${_i} _arg) + # pass linker flags along + if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") + list(APPEND unitree_api_LIBRARIES "${_arg}") + math(EXPR _i "${_i} + 1") + continue() + endif() + + if("${_arg}" MATCHES "^(debug|optimized|general)$") + # remember build configuration keyword + # and get following library name + set(_cfg "${_arg}") + math(EXPR _i "${_i} + 1") + if(_i EQUAL _length) + message(FATAL_ERROR "Package 'unitree_api' passes the build configuration keyword '${_cfg}' as the last exported target") + endif() + list(GET _exported_library_names ${_i} _library) + else() + # the value is a library target without a build configuration keyword + set(_cfg "") + set(_library "${_arg}") + endif() + math(EXPR _i "${_i} + 1") + + # extract optional LIBRARY_DIRS from library name + string(REPLACE ":" ";" _library_dirs "${_library}") + list(GET _library_dirs 0 _library_name) + list(REMOVE_AT _library_dirs 0) + + set(_lib "NOTFOUND") + if(NOT _library_dirs) + # search for library in the common locations + find_library( + _lib + NAMES "${_library_name}" + ) + if(NOT _lib) + # warn about not existing library and later ignore it + message(WARNING "Package 'unitree_api' exports library '${_library_name}' which couldn't be found") + endif() + else() + # search for library in the specified directories + find_library( + _lib + NAMES "${_library_name}" + PATHS ${_library_dirs} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if(NOT _lib) + # warn about not existing library and later ignore it + message(WARNING "Package 'unitree_api' exports library '${_library_name}' with LIBRARY_DIRS '${_library_dirs}' which couldn't be found") + endif() + endif() + if(_lib) + list(APPEND unitree_api_LIBRARIES ${_cfg} "${_lib}") + endif() + endwhile() +endif() + +# TODO(dirk-thomas) deduplicate unitree_api_LIBRARIES +# while maintaining library order +# as well as build configuration keywords +# as well as linker flags diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_targets-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_targets-extras.cmake new file mode 100644 index 0000000..cc5525c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/ament_cmake_export_targets-extras.cmake @@ -0,0 +1,27 @@ +# generated from ament_cmake_export_targets/cmake/ament_cmake_export_targets-extras.cmake.in + +set(_exported_targets "unitree_api__rosidl_generator_c;unitree_api__rosidl_typesupport_introspection_c;unitree_api__rosidl_typesupport_c;unitree_api__rosidl_generator_cpp;unitree_api__rosidl_typesupport_introspection_cpp;unitree_api__rosidl_typesupport_cpp") + +# include all exported targets +if(NOT _exported_targets STREQUAL "") + foreach(_target ${_exported_targets}) + set(_export_file "${unitree_api_DIR}/${_target}Export.cmake") + include("${_export_file}") + + # extract the target names associated with the export + set(_regex "foreach\\((_cmake)?_expected_?[Tt]arget (IN ITEMS )?(.+)\\)") + file( + STRINGS "${_export_file}" _foreach_targets + REGEX "${_regex}") + list(LENGTH _foreach_targets _matches) + if(NOT _matches EQUAL 1) + message(FATAL_ERROR + "Failed to find exported target names in '${_export_file}'") + endif() + string(REGEX REPLACE "${_regex}" "\\3" _targets "${_foreach_targets}") + string(REPLACE " " ";" _targets "${_targets}") + list(LENGTH _targets _length) + + list(APPEND unitree_api_TARGETS ${_targets}) + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake-extras.cmake new file mode 100644 index 0000000..9b686e8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake-extras.cmake @@ -0,0 +1,4 @@ +# generated from rosidl_cmake/cmake/rosidl_cmake-extras.cmake.in + +set(unitree_api_IDL_FILES "msg/Request.idl;msg/RequestHeader.idl;msg/RequestIdentity.idl;msg/RequestLease.idl;msg/RequestPolicy.idl;msg/Response.idl;msg/ResponseHeader.idl;msg/ResponseStatus.idl") +set(unitree_api_INTERFACE_FILES "msg/Request.msg;msg/RequestHeader.msg;msg/RequestIdentity.msg;msg/RequestLease.msg;msg/RequestPolicy.msg;msg/Response.msg;msg/ResponseHeader.msg;msg/ResponseStatus.msg") diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake new file mode 100644 index 0000000..c9d47ed --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake @@ -0,0 +1,46 @@ +# generated from +# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_libraries.cmake.in + +set(_exported_typesupport_libraries + "__rosidl_typesupport_fastrtps_c:unitree_api__rosidl_typesupport_fastrtps_c;__rosidl_typesupport_fastrtps_cpp:unitree_api__rosidl_typesupport_fastrtps_cpp") + +# populate unitree_api_LIBRARIES_ +if(NOT _exported_typesupport_libraries STREQUAL "") + # loop over typesupport libraries + foreach(_tuple ${_exported_typesupport_libraries}) + string(REPLACE ":" ";" _tuple "${_tuple}") + list(GET _tuple 0 _suffix) + list(GET _tuple 1 _library) + + if(NOT IS_ABSOLUTE "${_library}") + # search for library target relative to this CMake file + set(_lib "NOTFOUND") + find_library( + _lib NAMES "${_library}" + PATHS "${unitree_api_DIR}/../../../lib" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + if(NOT _lib) + # the library wasn't found + message(FATAL_ERROR "Package 'unitree_api' exports the typesupport library '${_library}' which couldn't be found") + elseif(NOT IS_ABSOLUTE "${_lib}") + # the found library must be an absolute path + message(FATAL_ERROR "Package 'unitree_api' found the typesupport library '${_library}' at '${_lib}' which is not an absolute path") + elseif(NOT EXISTS "${_lib}") + # the found library must exist + message(FATAL_ERROR "Package 'unitree_api' found the typesupport library '${_lib}' which doesn't exist") + else() + list(APPEND unitree_api_LIBRARIES${_suffix} ${_cfg} "${_lib}") + endif() + + else() + if(NOT EXISTS "${_library}") + # the found library must exist + message(WARNING "Package 'unitree_api' exports the typesupport library '${_library}' which doesn't exist") + else() + list(APPEND unitree_api_LIBRARIES${_suffix} "${_library}") + endif() + endif() + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake new file mode 100644 index 0000000..3a0327c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake @@ -0,0 +1,23 @@ +# generated from +# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_targets.cmake.in + +set(_exported_typesupport_targets + "__rosidl_typesupport_introspection_c:unitree_api__rosidl_typesupport_introspection_c;__rosidl_typesupport_introspection_cpp:unitree_api__rosidl_typesupport_introspection_cpp") + +# populate unitree_api_TARGETS_ +if(NOT _exported_typesupport_targets STREQUAL "") + # loop over typesupport targets + foreach(_tuple ${_exported_typesupport_targets}) + string(REPLACE ":" ";" _tuple "${_tuple}") + list(GET _tuple 0 _suffix) + list(GET _tuple 1 _target) + + set(_target "unitree_api::${_target}") + if(NOT TARGET "${_target}") + # the exported target must exist + message(WARNING "Package 'unitree_api' exports the typesupport target '${_target}' which doesn't exist") + else() + list(APPEND unitree_api_TARGETS${_suffix} "${_target}") + endif() + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig-version.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig-version.cmake new file mode 100644 index 0000000..7beb732 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig-version.cmake @@ -0,0 +1,14 @@ +# generated from ament/cmake/core/templates/nameConfig-version.cmake.in +set(PACKAGE_VERSION "0.0.0") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig.cmake new file mode 100644 index 0000000..bd35a5c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_apiConfig.cmake @@ -0,0 +1,42 @@ +# generated from ament/cmake/core/templates/nameConfig.cmake.in + +# prevent multiple inclusion +if(_unitree_api_CONFIG_INCLUDED) + # ensure to keep the found flag the same + if(NOT DEFINED unitree_api_FOUND) + # explicitly set it to FALSE, otherwise CMake will set it to TRUE + set(unitree_api_FOUND FALSE) + elseif(NOT unitree_api_FOUND) + # use separate condition to avoid uninitialized variable warning + set(unitree_api_FOUND FALSE) + endif() + return() +endif() +set(_unitree_api_CONFIG_INCLUDED TRUE) + +# output package information +if(NOT unitree_api_FIND_QUIETLY) + message(STATUS "Found unitree_api: 0.0.0 (${unitree_api_DIR})") +endif() + +# warn when using a deprecated package +if(NOT "" STREQUAL "") + set(_msg "Package 'unitree_api' is deprecated") + # append custom deprecation text if available + if(NOT "" STREQUAL "TRUE") + set(_msg "${_msg} ()") + endif() + # optionally quiet the deprecation message + if(NOT ${unitree_api_DEPRECATED_QUIET}) + message(DEPRECATION "${_msg}") + endif() +endif() + +# flag package as ament-based to distinguish it after being find_package()-ed +set(unitree_api_FOUND_AMENT_PACKAGE TRUE) + +# include all config extra files +set(_extras "rosidl_cmake-extras.cmake;ament_cmake_export_dependencies-extras.cmake;ament_cmake_export_libraries-extras.cmake;ament_cmake_export_targets-extras.cmake;ament_cmake_export_include_directories-extras.cmake;rosidl_cmake_export_typesupport_libraries-extras.cmake;rosidl_cmake_export_typesupport_targets-extras.cmake") +foreach(_extra ${_extras}) + include("${unitree_api_DIR}/${_extra}") +endforeach() diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport-noconfig.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport-noconfig.cmake new file mode 100644 index 0000000..2e4f4d8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_api::unitree_api__rosidl_generator_c" for configuration "" +set_property(TARGET unitree_api::unitree_api__rosidl_generator_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_api::unitree_api__rosidl_generator_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_generator_c.so" + IMPORTED_SONAME_NOCONFIG "libunitree_api__rosidl_generator_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_api::unitree_api__rosidl_generator_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_api::unitree_api__rosidl_generator_c "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_generator_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport.cmake new file mode 100644 index 0000000..4f7e95e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_api::unitree_api__rosidl_generator_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_api::unitree_api__rosidl_generator_c +add_library(unitree_api::unitree_api__rosidl_generator_c SHARED IMPORTED) + +set_target_properties(unitree_api::unitree_api__rosidl_generator_c PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rcutils::rcutils" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_api__rosidl_generator_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cppExport.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cppExport.cmake new file mode 100644 index 0000000..9f1900d --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_generator_cppExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_api::unitree_api__rosidl_generator_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_api::unitree_api__rosidl_generator_cpp +add_library(unitree_api::unitree_api__rosidl_generator_cpp INTERFACE IMPORTED) + +set_target_properties(unitree_api::unitree_api__rosidl_generator_cpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;rosidl_runtime_cpp::rosidl_runtime_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 3.0.0) + message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_api__rosidl_generator_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport-noconfig.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport-noconfig.cmake new file mode 100644 index 0000000..7d8f168 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_api::unitree_api__rosidl_typesupport_c" for configuration "" +set_property(TARGET unitree_api::unitree_api__rosidl_typesupport_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_c.so" + IMPORTED_SONAME_NOCONFIG "libunitree_api__rosidl_typesupport_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_api::unitree_api__rosidl_typesupport_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_api::unitree_api__rosidl_typesupport_c "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport.cmake new file mode 100644 index 0000000..a51f7a6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_api::unitree_api__rosidl_typesupport_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_api::unitree_api__rosidl_typesupport_c +add_library(unitree_api::unitree_api__rosidl_typesupport_c SHARED IMPORTED) + +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_c PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_c::rosidl_typesupport_c;rosidl_typesupport_interface::rosidl_typesupport_interface;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_api__rosidl_typesupport_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport-noconfig.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport-noconfig.cmake new file mode 100644 index 0000000..f96356e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_api::unitree_api__rosidl_typesupport_cpp" for configuration "" +set_property(TARGET unitree_api::unitree_api__rosidl_typesupport_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_cpp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_cpp.so" + IMPORTED_SONAME_NOCONFIG "libunitree_api__rosidl_typesupport_cpp.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_api::unitree_api__rosidl_typesupport_cpp ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_api::unitree_api__rosidl_typesupport_cpp "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_cpp.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport.cmake new file mode 100644 index 0000000..16c31ac --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_cppExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_api::unitree_api__rosidl_typesupport_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_api::unitree_api__rosidl_typesupport_cpp +add_library(unitree_api::unitree_api__rosidl_typesupport_cpp SHARED IMPORTED) + +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_cpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_runtime_cpp::rosidl_runtime_cpp;rosidl_typesupport_cpp::rosidl_typesupport_cpp;rosidl_typesupport_interface::rosidl_typesupport_interface;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_api__rosidl_typesupport_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport-noconfig.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport-noconfig.cmake new file mode 100644 index 0000000..00ce971 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_api::unitree_api__rosidl_typesupport_introspection_c" for configuration "" +set_property(TARGET unitree_api::unitree_api__rosidl_typesupport_introspection_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_introspection_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_introspection_c.so" + IMPORTED_SONAME_NOCONFIG "libunitree_api__rosidl_typesupport_introspection_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_api::unitree_api__rosidl_typesupport_introspection_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_api::unitree_api__rosidl_typesupport_introspection_c "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_introspection_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport.cmake new file mode 100644 index 0000000..2dde5a4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cExport.cmake @@ -0,0 +1,114 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_api::unitree_api__rosidl_typesupport_introspection_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_api::unitree_api__rosidl_typesupport_introspection_c +add_library(unitree_api::unitree_api__rosidl_typesupport_introspection_c SHARED IMPORTED) + +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_introspection_c PROPERTIES + INTERFACE_LINK_LIBRARIES "unitree_api::unitree_api__rosidl_generator_c;rosidl_typesupport_introspection_c::rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_api__rosidl_typesupport_introspection_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# Make sure the targets which have been exported in some other +# export set exist. +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) +foreach(_target "unitree_api::unitree_api__rosidl_generator_c" ) + if(NOT TARGET "${_target}" ) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") + endif() +endforeach() + +if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + if(CMAKE_FIND_PACKAGE_NAME) + set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + else() + message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + endif() +endif() +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport-noconfig.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport-noconfig.cmake new file mode 100644 index 0000000..2500f11 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_api::unitree_api__rosidl_typesupport_introspection_cpp" for configuration "" +set_property(TARGET unitree_api::unitree_api__rosidl_typesupport_introspection_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_introspection_cpp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_introspection_cpp.so" + IMPORTED_SONAME_NOCONFIG "libunitree_api__rosidl_typesupport_introspection_cpp.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_api::unitree_api__rosidl_typesupport_introspection_cpp ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_api::unitree_api__rosidl_typesupport_introspection_cpp "${_IMPORT_PREFIX}/lib/libunitree_api__rosidl_typesupport_introspection_cpp.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport.cmake b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport.cmake new file mode 100644 index 0000000..657a3e2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/cmake/unitree_api__rosidl_typesupport_introspection_cppExport.cmake @@ -0,0 +1,98 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_api::unitree_api__rosidl_typesupport_introspection_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_api::unitree_api__rosidl_typesupport_introspection_cpp +add_library(unitree_api::unitree_api__rosidl_typesupport_introspection_cpp SHARED IMPORTED) + +set_target_properties(unitree_api::unitree_api__rosidl_typesupport_introspection_cpp PROPERTIES + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_introspection_cpp::rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_api__rosidl_typesupport_introspection_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.dsv new file mode 100644 index 0000000..79d4c95 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;AMENT_PREFIX_PATH; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.sh new file mode 100644 index 0000000..02e441b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/ament_prefix_path.sh @@ -0,0 +1,4 @@ +# copied from +# ament_cmake_core/cmake/environment_hooks/environment/ament_prefix_path.sh + +ament_prepend_unique_value AMENT_PREFIX_PATH "$AMENT_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.dsv new file mode 100644 index 0000000..89bec93 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.sh new file mode 100644 index 0000000..292e518 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/library_path.sh @@ -0,0 +1,16 @@ +# copied from ament_package/template/environment_hook/library_path.sh + +# detect if running on Darwin platform +_UNAME=`uname -s` +_IS_DARWIN=0 +if [ "$_UNAME" = "Darwin" ]; then + _IS_DARWIN=1 +fi +unset _UNAME + +if [ $_IS_DARWIN -eq 0 ]; then + ament_prepend_unique_value LD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" +else + ament_prepend_unique_value DYLD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" +fi +unset _IS_DARWIN diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.dsv new file mode 100644 index 0000000..b94426a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate-if-exists;PATH;bin diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.sh new file mode 100644 index 0000000..e59b749 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/path.sh @@ -0,0 +1,5 @@ +# copied from ament_cmake_core/cmake/environment_hooks/environment/path.sh + +if [ -d "$AMENT_CURRENT_PREFIX/bin" ]; then + ament_prepend_unique_value PATH "$AMENT_CURRENT_PREFIX/bin" +fi diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.dsv new file mode 100644 index 0000000..84dbc4c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.sh new file mode 100644 index 0000000..7fe2b2f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/environment/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from ament_package/template/environment_hook/pythonpath.sh.in + +ament_prepend_unique_value PYTHONPATH "$AMENT_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.dsv new file mode 100644 index 0000000..e119f32 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;CMAKE_PREFIX_PATH; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.ps1 b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.ps1 new file mode 100644 index 0000000..d03facc --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.sh new file mode 100644 index 0000000..a948e68 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/cmake_prefix_path.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.dsv new file mode 100644 index 0000000..89bec93 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.ps1 b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.ps1 new file mode 100644 index 0000000..f6df601 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value LD_LIBRARY_PATH "$env:COLCON_CURRENT_PREFIX\lib" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.sh new file mode 100644 index 0000000..ca3c102 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/ld_library_path_lib.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value LD_LIBRARY_PATH "$COLCON_CURRENT_PREFIX/lib" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.dsv new file mode 100644 index 0000000..84dbc4c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.ps1 b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.ps1 new file mode 100644 index 0000000..12877ef --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\lib/python3.8/site-packages" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.sh new file mode 100644 index 0000000..ed8efd9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/hook/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value PYTHONPATH "$COLCON_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.bash b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.bash new file mode 100644 index 0000000..49782f2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.bash @@ -0,0 +1,46 @@ +# generated from ament_package/template/package_level/local_setup.bash.in + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.dsv new file mode 100644 index 0000000..3a58b11 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.dsv @@ -0,0 +1,4 @@ +source;share/unitree_api/environment/ament_prefix_path.sh +source;share/unitree_api/environment/library_path.sh +source;share/unitree_api/environment/path.sh +source;share/unitree_api/environment/pythonpath.sh diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.sh new file mode 100644 index 0000000..81dfc27 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.sh @@ -0,0 +1,135 @@ +# generated from ament_package/template/package_level/local_setup.sh.in + +# since this file is sourced use either the provided AMENT_CURRENT_PREFIX +# or fall back to the destination set at configure time +: ${AMENT_CURRENT_PREFIX:="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_api"} +if [ ! -d "$AMENT_CURRENT_PREFIX" ]; then + if [ -z "$COLCON_CURRENT_PREFIX" ]; then + echo "The compile time prefix path '$AMENT_CURRENT_PREFIX' doesn't " \ + "exist. Consider sourcing a different extension than '.sh'." 1>&2 + else + AMENT_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" + fi +fi + +# function to append values to environment variables +# using colons as separators and avoiding leading separators +ament_append_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # avoid leading separator + eval _values=\"\$$_listname\" + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + _ament_append_value_IFS=$IFS + unset IFS + eval export $_listname=\"\$$_listname:$_value\" + #eval echo "append list \$$_listname" + IFS=$_ament_append_value_IFS + unset _ament_append_value_IFS + fi + unset _values + + unset _value + unset _listname +} + +# function to prepend non-duplicate values to environment variables +# using colons as separators and avoiding trailing separators +ament_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # check if the list contains the value + eval _values=\"\$$_listname\" + _duplicate= + _ament_prepend_unique_value_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array _values + fi + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + if [ "$_item" = "$_value" ]; then + _duplicate=1 + fi + done + unset _item + + # prepend only non-duplicates + if [ -z "$_duplicate" ]; then + # avoid trailing separator + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + unset IFS + eval export $_listname=\"$_value:\$$_listname\" + #eval echo "prepend list \$$_listname" + fi + fi + IFS=$_ament_prepend_unique_value_IFS + unset _ament_prepend_unique_value_IFS + unset _duplicate + unset _values + + unset _value + unset _listname +} + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# list all environment hooks of this package +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_api/environment/ament_prefix_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_api/environment/library_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_api/environment/path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_api/environment/pythonpath.sh" + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array AMENT_ENVIRONMENT_HOOKS + fi + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + if [ -f "$_hook" ]; then + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + # trace output + if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_hook\"" + fi + . "$_hook" + fi + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +# reset AMENT_CURRENT_PREFIX after each package +# allowing to source multiple package-level setup files +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.zsh b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.zsh new file mode 100644 index 0000000..fe161be --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/local_setup.zsh @@ -0,0 +1,59 @@ +# generated from ament_package/template/package_level/local_setup.zsh.in + +AMENT_SHELL=zsh + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# function to convert array-like strings into arrays +# to wordaround SH_WORD_SPLIT not being set +ament_zsh_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +# the package-level local_setup file unsets AMENT_CURRENT_PREFIX +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.idl new file mode 100644 index 0000000..7ffe0f0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.idl @@ -0,0 +1,17 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/Request.msg +// generated code does not contain a copyright notice + +#include "unitree_api/msg/RequestHeader.idl" + +module unitree_api { + module msg { + struct Request { + unitree_api::msg::RequestHeader header; + + string parameter; + + sequence binary; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.msg new file mode 100644 index 0000000..b1df58a --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Request.msg @@ -0,0 +1,3 @@ +RequestHeader header +string parameter +uint8[] binary \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.idl new file mode 100644 index 0000000..97d6987 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.idl @@ -0,0 +1,19 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/RequestHeader.msg +// generated code does not contain a copyright notice + +#include "unitree_api/msg/RequestIdentity.idl" +#include "unitree_api/msg/RequestLease.idl" +#include "unitree_api/msg/RequestPolicy.idl" + +module unitree_api { + module msg { + struct RequestHeader { + unitree_api::msg::RequestIdentity identity; + + unitree_api::msg::RequestLease lease; + + unitree_api::msg::RequestPolicy policy; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.msg new file mode 100644 index 0000000..022161b --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestHeader.msg @@ -0,0 +1,3 @@ +RequestIdentity identity +RequestLease lease +RequestPolicy policy \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.idl new file mode 100644 index 0000000..2ead946 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.idl @@ -0,0 +1,14 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/RequestIdentity.msg +// generated code does not contain a copyright notice + + +module unitree_api { + module msg { + struct RequestIdentity { + int64 id; + + int64 api_id; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.msg new file mode 100644 index 0000000..90011ff --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestIdentity.msg @@ -0,0 +1,2 @@ +int64 id +int64 api_id \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.idl new file mode 100644 index 0000000..698449e --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.idl @@ -0,0 +1,12 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/RequestLease.msg +// generated code does not contain a copyright notice + + +module unitree_api { + module msg { + struct RequestLease { + int64 id; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.msg new file mode 100644 index 0000000..85f692f --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestLease.msg @@ -0,0 +1 @@ +int64 id \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.idl new file mode 100644 index 0000000..ff73905 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.idl @@ -0,0 +1,14 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/RequestPolicy.msg +// generated code does not contain a copyright notice + + +module unitree_api { + module msg { + struct RequestPolicy { + int32 priority; + + boolean noreply; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.msg new file mode 100644 index 0000000..89e00c2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/RequestPolicy.msg @@ -0,0 +1,2 @@ +int32 priority +bool noreply \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.idl new file mode 100644 index 0000000..59ac745 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.idl @@ -0,0 +1,17 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/Response.msg +// generated code does not contain a copyright notice + +#include "unitree_api/msg/ResponseHeader.idl" + +module unitree_api { + module msg { + struct Response { + unitree_api::msg::ResponseHeader header; + + string data; + + sequence binary; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.msg new file mode 100644 index 0000000..2036630 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/Response.msg @@ -0,0 +1,3 @@ +ResponseHeader header +string data +int8[] binary diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.idl new file mode 100644 index 0000000..de1dd0c --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.idl @@ -0,0 +1,16 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/ResponseHeader.msg +// generated code does not contain a copyright notice + +#include "unitree_api/msg/RequestIdentity.idl" +#include "unitree_api/msg/ResponseStatus.idl" + +module unitree_api { + module msg { + struct ResponseHeader { + unitree_api::msg::RequestIdentity identity; + + unitree_api::msg::ResponseStatus status; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.msg new file mode 100644 index 0000000..3d51649 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseHeader.msg @@ -0,0 +1,2 @@ +RequestIdentity identity +ResponseStatus status diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.idl new file mode 100644 index 0000000..6d6fcad --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.idl @@ -0,0 +1,12 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_api/msg/ResponseStatus.msg +// generated code does not contain a copyright notice + + +module unitree_api { + module msg { + struct ResponseStatus { + int32 code; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.msg b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.msg new file mode 100644 index 0000000..1d379fa --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/ResponseStatus.msg @@ -0,0 +1 @@ +int32 code \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestHeader_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestHeader_.idl new file mode 100644 index 0000000..8493ad2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestHeader_.idl @@ -0,0 +1,34 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/RequestHeader.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/dds_connext/RequestIdentity_.idl" +#include "unitree_api/msg/dds_connext/RequestLease_.idl" +#include "unitree_api/msg/dds_connext/RequestPolicy_.idl" + +#ifndef __unitree_api__msg__request_header__idl__ +#define __unitree_api__msg__request_header__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct RequestHeader_ { +unitree_api::msg::dds_::RequestIdentity_ identity_; +unitree_api::msg::dds_::RequestLease_ lease_; +unitree_api::msg::dds_::RequestPolicy_ policy_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__request_header__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestIdentity_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestIdentity_.idl new file mode 100644 index 0000000..dc65c91 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestIdentity_.idl @@ -0,0 +1,30 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/RequestIdentity.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_api__msg__request_identity__idl__ +#define __unitree_api__msg__request_identity__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct RequestIdentity_ { +long long id_; +long long api_id_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__request_identity__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestLease_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestLease_.idl new file mode 100644 index 0000000..fdb7980 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestLease_.idl @@ -0,0 +1,29 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/RequestLease.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_api__msg__request_lease__idl__ +#define __unitree_api__msg__request_lease__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct RequestLease_ { +long long id_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__request_lease__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestPolicy_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestPolicy_.idl new file mode 100644 index 0000000..9181d63 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/RequestPolicy_.idl @@ -0,0 +1,30 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/RequestPolicy.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_api__msg__request_policy__idl__ +#define __unitree_api__msg__request_policy__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct RequestPolicy_ { +long priority_; +boolean noreply_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__request_policy__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Request_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Request_.idl new file mode 100644 index 0000000..0a99414 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Request_.idl @@ -0,0 +1,33 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/Request.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/dds_connext/RequestHeader_.idl" + +#ifndef __unitree_api__msg__request__idl__ +#define __unitree_api__msg__request__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct Request_ { +unitree_api::msg::dds_::RequestHeader_ header_; +string parameter_; +sequence binary_; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__request__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseHeader_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseHeader_.idl new file mode 100644 index 0000000..4bd3912 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseHeader_.idl @@ -0,0 +1,32 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/ResponseHeader.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/dds_connext/RequestIdentity_.idl" +#include "unitree_api/msg/dds_connext/ResponseStatus_.idl" + +#ifndef __unitree_api__msg__response_header__idl__ +#define __unitree_api__msg__response_header__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct ResponseHeader_ { +unitree_api::msg::dds_::RequestIdentity_ identity_; +unitree_api::msg::dds_::ResponseStatus_ status_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__response_header__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseStatus_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseStatus_.idl new file mode 100644 index 0000000..a7e1fea --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/ResponseStatus_.idl @@ -0,0 +1,29 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/ResponseStatus.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_api__msg__response_status__idl__ +#define __unitree_api__msg__response_status__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct ResponseStatus_ { +long code_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__response_status__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Response_.idl b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Response_.idl new file mode 100644 index 0000000..49947ff --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/msg/dds_connext/Response_.idl @@ -0,0 +1,33 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_api:msg/Response.idl +// generated code does not contain a copyright notice +#include "unitree_api/msg/dds_connext/ResponseHeader_.idl" + +#ifndef __unitree_api__msg__response__idl__ +#define __unitree_api__msg__response__idl__ + + +module unitree_api { + +module msg { + +module dds_ { + + +struct Response_ { +unitree_api::msg::dds_::ResponseHeader_ header_; +string data_; +sequence binary_; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_api + + +#endif // __unitree_api__msg__response__idl__ diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/package.bash b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.bash new file mode 100644 index 0000000..b8b8f51 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.bash @@ -0,0 +1,39 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/unitree_api/package.sh" + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" + +# source bash hooks +_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/unitree_api/local_setup.bash" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/package.dsv b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.dsv new file mode 100644 index 0000000..656bd50 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.dsv @@ -0,0 +1,14 @@ +source;share/unitree_api/hook/cmake_prefix_path.ps1 +source;share/unitree_api/hook/cmake_prefix_path.dsv +source;share/unitree_api/hook/cmake_prefix_path.sh +source;share/unitree_api/hook/ld_library_path_lib.ps1 +source;share/unitree_api/hook/ld_library_path_lib.dsv +source;share/unitree_api/hook/ld_library_path_lib.sh +source;share/unitree_api/hook/pythonpath.ps1 +source;share/unitree_api/hook/pythonpath.dsv +source;share/unitree_api/hook/pythonpath.sh +source;share/unitree_api/local_setup.bash +source;share/unitree_api/local_setup.dsv +source;share/unitree_api/local_setup.ps1 +source;share/unitree_api/local_setup.sh +source;share/unitree_api/local_setup.zsh diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/package.ps1 b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.ps1 new file mode 100644 index 0000000..fb211f8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.ps1 @@ -0,0 +1,118 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to append a value to a variable +# which uses colons as separators +# duplicates as well as leading separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_append_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + $_duplicate="" + # start with no values + $_all_values="" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -eq $_value) { + $_duplicate="1" + } + if ($_all_values) { + $_all_values="${_all_values};$_" + } else { + $_all_values="$_" + } + } + } + } + # append only non-duplicates + if (!$_duplicate) { + # avoid leading separator + if ($_all_values) { + $_all_values="${_all_values};${_value}" + } else { + $_all_values="${_value}" + } + } + + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_api/hook/cmake_prefix_path.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_api/hook/ld_library_path_lib.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_api/hook/pythonpath.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_api/local_setup.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/package.sh b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.sh new file mode 100644 index 0000000..a2f8237 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.sh @@ -0,0 +1,89 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_api" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_api/hook/cmake_prefix_path.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_api/hook/ld_library_path_lib.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_api/hook/pythonpath.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_api/local_setup.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/package.xml b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.xml new file mode 100644 index 0000000..915a946 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.xml @@ -0,0 +1,23 @@ + + + + unitree_api + 0.0.0 + TODO: Package description + czk + TODO: License declaration + + rosidl_default_generators + rosidl_default_runtime + rosidl_interface_packages + ament_cmake + + geometry_msgs + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/deploy/robot_ws/install/unitree_api/share/unitree_api/package.zsh b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.zsh new file mode 100644 index 0000000..880fd38 --- /dev/null +++ b/deploy/robot_ws/install/unitree_api/share/unitree_api/package.zsh @@ -0,0 +1,50 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/unitree_api/package.sh" +unset convert_zsh_to_array + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" + +# source zsh hooks +_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_api/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.h new file mode 100644 index 0000000..0e53b0c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__AUDIO_DATA_H_ +#define UNITREE_GO__MSG__AUDIO_DATA_H_ + +#include "unitree_go/msg/detail/audio_data__struct.h" +#include "unitree_go/msg/detail/audio_data__functions.h" +#include "unitree_go/msg/detail/audio_data__type_support.h" + +#endif // UNITREE_GO__MSG__AUDIO_DATA_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.hpp new file mode 100644 index 0000000..cd0bece --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/audio_data.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__AUDIO_DATA_HPP_ +#define UNITREE_GO__MSG__AUDIO_DATA_HPP_ + +#include "unitree_go/msg/detail/audio_data__struct.hpp" +#include "unitree_go/msg/detail/audio_data__builder.hpp" +#include "unitree_go/msg/detail/audio_data__traits.hpp" +#include "unitree_go/msg/detail/audio_data__type_support.hpp" + +#endif // UNITREE_GO__MSG__AUDIO_DATA_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.h new file mode 100644 index 0000000..f2e734f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__BMS_CMD_H_ +#define UNITREE_GO__MSG__BMS_CMD_H_ + +#include "unitree_go/msg/detail/bms_cmd__struct.h" +#include "unitree_go/msg/detail/bms_cmd__functions.h" +#include "unitree_go/msg/detail/bms_cmd__type_support.h" + +#endif // UNITREE_GO__MSG__BMS_CMD_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.hpp new file mode 100644 index 0000000..3dc6de1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_cmd.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__BMS_CMD_HPP_ +#define UNITREE_GO__MSG__BMS_CMD_HPP_ + +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" +#include "unitree_go/msg/detail/bms_cmd__builder.hpp" +#include "unitree_go/msg/detail/bms_cmd__traits.hpp" +#include "unitree_go/msg/detail/bms_cmd__type_support.hpp" + +#endif // UNITREE_GO__MSG__BMS_CMD_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.h new file mode 100644 index 0000000..02a74a8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__BMS_STATE_H_ +#define UNITREE_GO__MSG__BMS_STATE_H_ + +#include "unitree_go/msg/detail/bms_state__struct.h" +#include "unitree_go/msg/detail/bms_state__functions.h" +#include "unitree_go/msg/detail/bms_state__type_support.h" + +#endif // UNITREE_GO__MSG__BMS_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.hpp new file mode 100644 index 0000000..f22e8aa --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/bms_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__BMS_STATE_HPP_ +#define UNITREE_GO__MSG__BMS_STATE_HPP_ + +#include "unitree_go/msg/detail/bms_state__struct.hpp" +#include "unitree_go/msg/detail/bms_state__builder.hpp" +#include "unitree_go/msg/detail/bms_state__traits.hpp" +#include "unitree_go/msg/detail/bms_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__BMS_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__builder.hpp new file mode 100644 index 0000000..2669aa0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__BUILDER_HPP_ + +#include "unitree_go/msg/detail/audio_data__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_AudioData_data +{ +public: + explicit Init_AudioData_data(::unitree_go::msg::AudioData & msg) + : msg_(msg) + {} + ::unitree_go::msg::AudioData data(::unitree_go::msg::AudioData::_data_type arg) + { + msg_.data = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::AudioData msg_; +}; + +class Init_AudioData_time_frame +{ +public: + Init_AudioData_time_frame() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_AudioData_data time_frame(::unitree_go::msg::AudioData::_time_frame_type arg) + { + msg_.time_frame = std::move(arg); + return Init_AudioData_data(msg_); + } + +private: + ::unitree_go::msg::AudioData msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::AudioData>() +{ + return unitree_go::msg::builder::Init_AudioData_time_frame(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.c new file mode 100644 index 0000000..a7609a8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.c @@ -0,0 +1,254 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/audio_data__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `data` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool +unitree_go__msg__AudioData__init(unitree_go__msg__AudioData * msg) +{ + if (!msg) { + return false; + } + // time_frame + // data + if (!rosidl_runtime_c__uint8__Sequence__init(&msg->data, 0)) { + unitree_go__msg__AudioData__fini(msg); + return false; + } + return true; +} + +void +unitree_go__msg__AudioData__fini(unitree_go__msg__AudioData * msg) +{ + if (!msg) { + return; + } + // time_frame + // data + rosidl_runtime_c__uint8__Sequence__fini(&msg->data); +} + +bool +unitree_go__msg__AudioData__are_equal(const unitree_go__msg__AudioData * lhs, const unitree_go__msg__AudioData * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // time_frame + if (lhs->time_frame != rhs->time_frame) { + return false; + } + // data + if (!rosidl_runtime_c__uint8__Sequence__are_equal( + &(lhs->data), &(rhs->data))) + { + return false; + } + return true; +} + +bool +unitree_go__msg__AudioData__copy( + const unitree_go__msg__AudioData * input, + unitree_go__msg__AudioData * output) +{ + if (!input || !output) { + return false; + } + // time_frame + output->time_frame = input->time_frame; + // data + if (!rosidl_runtime_c__uint8__Sequence__copy( + &(input->data), &(output->data))) + { + return false; + } + return true; +} + +unitree_go__msg__AudioData * +unitree_go__msg__AudioData__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__AudioData * msg = (unitree_go__msg__AudioData *)allocator.allocate(sizeof(unitree_go__msg__AudioData), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__AudioData)); + bool success = unitree_go__msg__AudioData__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__AudioData__destroy(unitree_go__msg__AudioData * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__AudioData__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__AudioData__Sequence__init(unitree_go__msg__AudioData__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__AudioData * data = NULL; + + if (size) { + data = (unitree_go__msg__AudioData *)allocator.zero_allocate(size, sizeof(unitree_go__msg__AudioData), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__AudioData__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__AudioData__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__AudioData__Sequence__fini(unitree_go__msg__AudioData__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__AudioData__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__AudioData__Sequence * +unitree_go__msg__AudioData__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__AudioData__Sequence * array = (unitree_go__msg__AudioData__Sequence *)allocator.allocate(sizeof(unitree_go__msg__AudioData__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__AudioData__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__AudioData__Sequence__destroy(unitree_go__msg__AudioData__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__AudioData__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__AudioData__Sequence__are_equal(const unitree_go__msg__AudioData__Sequence * lhs, const unitree_go__msg__AudioData__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__AudioData__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__AudioData__Sequence__copy( + const unitree_go__msg__AudioData__Sequence * input, + unitree_go__msg__AudioData__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__AudioData); + unitree_go__msg__AudioData * data = + (unitree_go__msg__AudioData *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__AudioData__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__AudioData__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__AudioData__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.h new file mode 100644 index 0000000..08f4495 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/audio_data__struct.h" + +/// Initialize msg/AudioData message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__AudioData + * )) before or use + * unitree_go__msg__AudioData__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__AudioData__init(unitree_go__msg__AudioData * msg); + +/// Finalize msg/AudioData message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__AudioData__fini(unitree_go__msg__AudioData * msg); + +/// Create msg/AudioData message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__AudioData__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__AudioData * +unitree_go__msg__AudioData__create(); + +/// Destroy msg/AudioData message. +/** + * It calls + * unitree_go__msg__AudioData__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__AudioData__destroy(unitree_go__msg__AudioData * msg); + +/// Check for msg/AudioData message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__AudioData__are_equal(const unitree_go__msg__AudioData * lhs, const unitree_go__msg__AudioData * rhs); + +/// Copy a msg/AudioData message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__AudioData__copy( + const unitree_go__msg__AudioData * input, + unitree_go__msg__AudioData * output); + +/// Initialize array of msg/AudioData messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__AudioData__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__AudioData__Sequence__init(unitree_go__msg__AudioData__Sequence * array, size_t size); + +/// Finalize array of msg/AudioData messages. +/** + * It calls + * unitree_go__msg__AudioData__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__AudioData__Sequence__fini(unitree_go__msg__AudioData__Sequence * array); + +/// Create array of msg/AudioData messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__AudioData__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__AudioData__Sequence * +unitree_go__msg__AudioData__Sequence__create(size_t size); + +/// Destroy array of msg/AudioData messages. +/** + * It calls + * unitree_go__msg__AudioData__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__AudioData__Sequence__destroy(unitree_go__msg__AudioData__Sequence * array); + +/// Check for msg/AudioData message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__AudioData__Sequence__are_equal(const unitree_go__msg__AudioData__Sequence * lhs, const unitree_go__msg__AudioData__Sequence * rhs); + +/// Copy an array of msg/AudioData messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__AudioData__Sequence__copy( + const unitree_go__msg__AudioData__Sequence * input, + unitree_go__msg__AudioData__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..1e0c84d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__AudioData( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__AudioData( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, AudioData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..81ae2e9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/audio_data__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::AudioData & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::AudioData & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::AudioData & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_AudioData( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, AudioData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..7e4fc10 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, AudioData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..26a305c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, AudioData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.h new file mode 100644 index 0000000..02840c3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.h @@ -0,0 +1,45 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'data' +#include "rosidl_runtime_c/primitives_sequence.h" + +// Struct defined in msg/AudioData in the package unitree_go. +typedef struct unitree_go__msg__AudioData +{ + uint64_t time_frame; + rosidl_runtime_c__uint8__Sequence data; +} unitree_go__msg__AudioData; + +// Struct for a sequence of unitree_go__msg__AudioData. +typedef struct unitree_go__msg__AudioData__Sequence +{ + unitree_go__msg__AudioData * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__AudioData__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.hpp new file mode 100644 index 0000000..4a403d8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__struct.hpp @@ -0,0 +1,142 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__AudioData __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__AudioData __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct AudioData_ +{ + using Type = AudioData_; + + explicit AudioData_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->time_frame = 0ull; + } + } + + explicit AudioData_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->time_frame = 0ull; + } + } + + // field types and members + using _time_frame_type = + uint64_t; + _time_frame_type time_frame; + using _data_type = + std::vector::other>; + _data_type data; + + // setters for named parameter idiom + Type & set__time_frame( + const uint64_t & _arg) + { + this->time_frame = _arg; + return *this; + } + Type & set__data( + const std::vector::other> & _arg) + { + this->data = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::AudioData_ *; + using ConstRawPtr = + const unitree_go::msg::AudioData_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__AudioData + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__AudioData + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const AudioData_ & other) const + { + if (this->time_frame != other.time_frame) { + return false; + } + if (this->data != other.data) { + return false; + } + return true; + } + bool operator!=(const AudioData_ & other) const + { + return !this->operator==(other); + } +}; // struct AudioData_ + +// alias to use template instance with default allocator +using AudioData = + unitree_go::msg::AudioData_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__traits.hpp new file mode 100644 index 0000000..84b9b36 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TRAITS_HPP_ + +#include "unitree_go/msg/detail/audio_data__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::AudioData"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/AudioData"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.c new file mode 100644 index 0000000..5adade8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.c @@ -0,0 +1,100 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/audio_data__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/audio_data__functions.h" +#include "unitree_go/msg/detail/audio_data__struct.h" + + +// Include directives for member types +// Member `data` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void AudioData__rosidl_typesupport_introspection_c__AudioData_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__AudioData__init(message_memory); +} + +void AudioData__rosidl_typesupport_introspection_c__AudioData_fini_function(void * message_memory) +{ + unitree_go__msg__AudioData__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember AudioData__rosidl_typesupport_introspection_c__AudioData_message_member_array[2] = { + { + "time_frame", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT64, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__AudioData, time_frame), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "data", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__AudioData, data), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers AudioData__rosidl_typesupport_introspection_c__AudioData_message_members = { + "unitree_go__msg", // message namespace + "AudioData", // message name + 2, // number of fields + sizeof(unitree_go__msg__AudioData), + AudioData__rosidl_typesupport_introspection_c__AudioData_message_member_array, // message members + AudioData__rosidl_typesupport_introspection_c__AudioData_init_function, // function to initialize message memory (memory has to be allocated) + AudioData__rosidl_typesupport_introspection_c__AudioData_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t AudioData__rosidl_typesupport_introspection_c__AudioData_message_type_support_handle = { + 0, + &AudioData__rosidl_typesupport_introspection_c__AudioData_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, AudioData)() { + if (!AudioData__rosidl_typesupport_introspection_c__AudioData_message_type_support_handle.typesupport_identifier) { + AudioData__rosidl_typesupport_introspection_c__AudioData_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &AudioData__rosidl_typesupport_introspection_c__AudioData_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.cpp new file mode 100644 index 0000000..fbc0cb3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.cpp @@ -0,0 +1,149 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/audio_data__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void AudioData_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::AudioData(_init); +} + +void AudioData_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~AudioData(); +} + +size_t size_function__AudioData__data(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__AudioData__data(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__AudioData__data(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__AudioData__data(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember AudioData_message_member_array[2] = { + { + "time_frame", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT64, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::AudioData, time_frame), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "data", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::AudioData, data), // bytes offset in struct + nullptr, // default value + size_function__AudioData__data, // size() function pointer + get_const_function__AudioData__data, // get_const(index) function pointer + get_function__AudioData__data, // get(index) function pointer + resize_function__AudioData__data // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers AudioData_message_members = { + "unitree_go::msg", // message namespace + "AudioData", // message name + 2, // number of fields + sizeof(unitree_go::msg::AudioData), + AudioData_message_member_array, // message members + AudioData_init_function, // function to initialize message memory (memory has to be allocated) + AudioData_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t AudioData_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &AudioData_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::AudioData_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, AudioData)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::AudioData_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.h new file mode 100644 index 0000000..1a9e388 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + AudioData +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.hpp new file mode 100644 index 0000000..0a55289 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/audio_data__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + AudioData +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__AUDIO_DATA__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__builder.hpp new file mode 100644 index 0000000..ed95748 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__BUILDER_HPP_ + +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_BmsCmd_reserve +{ +public: + explicit Init_BmsCmd_reserve(::unitree_go::msg::BmsCmd & msg) + : msg_(msg) + {} + ::unitree_go::msg::BmsCmd reserve(::unitree_go::msg::BmsCmd::_reserve_type arg) + { + msg_.reserve = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::BmsCmd msg_; +}; + +class Init_BmsCmd_off +{ +public: + Init_BmsCmd_off() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_BmsCmd_reserve off(::unitree_go::msg::BmsCmd::_off_type arg) + { + msg_.off = std::move(arg); + return Init_BmsCmd_reserve(msg_); + } + +private: + ::unitree_go::msg::BmsCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::BmsCmd>() +{ + return unitree_go::msg::builder::Init_BmsCmd_off(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.c new file mode 100644 index 0000000..db520cd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.c @@ -0,0 +1,243 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/bms_cmd__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__BmsCmd__init(unitree_go__msg__BmsCmd * msg) +{ + if (!msg) { + return false; + } + // off + // reserve + return true; +} + +void +unitree_go__msg__BmsCmd__fini(unitree_go__msg__BmsCmd * msg) +{ + if (!msg) { + return; + } + // off + // reserve +} + +bool +unitree_go__msg__BmsCmd__are_equal(const unitree_go__msg__BmsCmd * lhs, const unitree_go__msg__BmsCmd * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // off + if (lhs->off != rhs->off) { + return false; + } + // reserve + for (size_t i = 0; i < 3; ++i) { + if (lhs->reserve[i] != rhs->reserve[i]) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__BmsCmd__copy( + const unitree_go__msg__BmsCmd * input, + unitree_go__msg__BmsCmd * output) +{ + if (!input || !output) { + return false; + } + // off + output->off = input->off; + // reserve + for (size_t i = 0; i < 3; ++i) { + output->reserve[i] = input->reserve[i]; + } + return true; +} + +unitree_go__msg__BmsCmd * +unitree_go__msg__BmsCmd__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__BmsCmd * msg = (unitree_go__msg__BmsCmd *)allocator.allocate(sizeof(unitree_go__msg__BmsCmd), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__BmsCmd)); + bool success = unitree_go__msg__BmsCmd__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__BmsCmd__destroy(unitree_go__msg__BmsCmd * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__BmsCmd__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__BmsCmd__Sequence__init(unitree_go__msg__BmsCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__BmsCmd * data = NULL; + + if (size) { + data = (unitree_go__msg__BmsCmd *)allocator.zero_allocate(size, sizeof(unitree_go__msg__BmsCmd), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__BmsCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__BmsCmd__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__BmsCmd__Sequence__fini(unitree_go__msg__BmsCmd__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__BmsCmd__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__BmsCmd__Sequence * +unitree_go__msg__BmsCmd__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__BmsCmd__Sequence * array = (unitree_go__msg__BmsCmd__Sequence *)allocator.allocate(sizeof(unitree_go__msg__BmsCmd__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__BmsCmd__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__BmsCmd__Sequence__destroy(unitree_go__msg__BmsCmd__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__BmsCmd__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__BmsCmd__Sequence__are_equal(const unitree_go__msg__BmsCmd__Sequence * lhs, const unitree_go__msg__BmsCmd__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__BmsCmd__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__BmsCmd__Sequence__copy( + const unitree_go__msg__BmsCmd__Sequence * input, + unitree_go__msg__BmsCmd__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__BmsCmd); + unitree_go__msg__BmsCmd * data = + (unitree_go__msg__BmsCmd *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__BmsCmd__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__BmsCmd__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__BmsCmd__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.h new file mode 100644 index 0000000..f9d18a5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/bms_cmd__struct.h" + +/// Initialize msg/BmsCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__BmsCmd + * )) before or use + * unitree_go__msg__BmsCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsCmd__init(unitree_go__msg__BmsCmd * msg); + +/// Finalize msg/BmsCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsCmd__fini(unitree_go__msg__BmsCmd * msg); + +/// Create msg/BmsCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__BmsCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__BmsCmd * +unitree_go__msg__BmsCmd__create(); + +/// Destroy msg/BmsCmd message. +/** + * It calls + * unitree_go__msg__BmsCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsCmd__destroy(unitree_go__msg__BmsCmd * msg); + +/// Check for msg/BmsCmd message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsCmd__are_equal(const unitree_go__msg__BmsCmd * lhs, const unitree_go__msg__BmsCmd * rhs); + +/// Copy a msg/BmsCmd message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsCmd__copy( + const unitree_go__msg__BmsCmd * input, + unitree_go__msg__BmsCmd * output); + +/// Initialize array of msg/BmsCmd messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__BmsCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsCmd__Sequence__init(unitree_go__msg__BmsCmd__Sequence * array, size_t size); + +/// Finalize array of msg/BmsCmd messages. +/** + * It calls + * unitree_go__msg__BmsCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsCmd__Sequence__fini(unitree_go__msg__BmsCmd__Sequence * array); + +/// Create array of msg/BmsCmd messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__BmsCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__BmsCmd__Sequence * +unitree_go__msg__BmsCmd__Sequence__create(size_t size); + +/// Destroy array of msg/BmsCmd messages. +/** + * It calls + * unitree_go__msg__BmsCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsCmd__Sequence__destroy(unitree_go__msg__BmsCmd__Sequence * array); + +/// Check for msg/BmsCmd message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsCmd__Sequence__are_equal(const unitree_go__msg__BmsCmd__Sequence * lhs, const unitree_go__msg__BmsCmd__Sequence * rhs); + +/// Copy an array of msg/BmsCmd messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsCmd__Sequence__copy( + const unitree_go__msg__BmsCmd__Sequence * input, + unitree_go__msg__BmsCmd__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..b7a7c3e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__BmsCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__BmsCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, BmsCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..3237daf --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::BmsCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::BmsCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::BmsCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_BmsCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, BmsCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..62a41f3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..fcaff2b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, BmsCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.h new file mode 100644 index 0000000..56eb65e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.h @@ -0,0 +1,41 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/BmsCmd in the package unitree_go. +typedef struct unitree_go__msg__BmsCmd +{ + uint8_t off; + uint8_t reserve[3]; +} unitree_go__msg__BmsCmd; + +// Struct for a sequence of unitree_go__msg__BmsCmd. +typedef struct unitree_go__msg__BmsCmd__Sequence +{ + unitree_go__msg__BmsCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__BmsCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.hpp new file mode 100644 index 0000000..d5e6812 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__struct.hpp @@ -0,0 +1,144 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__BmsCmd __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__BmsCmd __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct BmsCmd_ +{ + using Type = BmsCmd_; + + explicit BmsCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->off = 0; + std::fill::iterator, uint8_t>(this->reserve.begin(), this->reserve.end(), 0); + } + } + + explicit BmsCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : reserve(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->off = 0; + std::fill::iterator, uint8_t>(this->reserve.begin(), this->reserve.end(), 0); + } + } + + // field types and members + using _off_type = + uint8_t; + _off_type off; + using _reserve_type = + std::array; + _reserve_type reserve; + + // setters for named parameter idiom + Type & set__off( + const uint8_t & _arg) + { + this->off = _arg; + return *this; + } + Type & set__reserve( + const std::array & _arg) + { + this->reserve = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::BmsCmd_ *; + using ConstRawPtr = + const unitree_go::msg::BmsCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__BmsCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__BmsCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const BmsCmd_ & other) const + { + if (this->off != other.off) { + return false; + } + if (this->reserve != other.reserve) { + return false; + } + return true; + } + bool operator!=(const BmsCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct BmsCmd_ + +// alias to use template instance with default allocator +using BmsCmd = + unitree_go::msg::BmsCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__traits.hpp new file mode 100644 index 0000000..b46b48c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__TRAITS_HPP_ + +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::BmsCmd"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/BmsCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.c new file mode 100644 index 0000000..488909f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.c @@ -0,0 +1,96 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/bms_cmd__functions.h" +#include "unitree_go/msg/detail/bms_cmd__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__BmsCmd__init(message_memory); +} + +void BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_fini_function(void * message_memory) +{ + unitree_go__msg__BmsCmd__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_member_array[2] = { + { + "off", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsCmd, off), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsCmd, reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_members = { + "unitree_go__msg", // message namespace + "BmsCmd", // message name + 2, // number of fields + sizeof(unitree_go__msg__BmsCmd), + BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_member_array, // message members + BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_init_function, // function to initialize message memory (memory has to be allocated) + BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_type_support_handle = { + 0, + &BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsCmd)() { + if (!BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_type_support_handle.typesupport_identifier) { + BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &BmsCmd__rosidl_typesupport_introspection_c__BmsCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.cpp new file mode 100644 index 0000000..f893d64 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.cpp @@ -0,0 +1,142 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void BmsCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::BmsCmd(_init); +} + +void BmsCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~BmsCmd(); +} + +size_t size_function__BmsCmd__reserve(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__BmsCmd__reserve(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__BmsCmd__reserve(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember BmsCmd_message_member_array[2] = { + { + "off", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsCmd, off), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsCmd, reserve), // bytes offset in struct + nullptr, // default value + size_function__BmsCmd__reserve, // size() function pointer + get_const_function__BmsCmd__reserve, // get_const(index) function pointer + get_function__BmsCmd__reserve, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers BmsCmd_message_members = { + "unitree_go::msg", // message namespace + "BmsCmd", // message name + 2, // number of fields + sizeof(unitree_go::msg::BmsCmd), + BmsCmd_message_member_array, // message members + BmsCmd_init_function, // function to initialize message memory (memory has to be allocated) + BmsCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t BmsCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &BmsCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::BmsCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, BmsCmd)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::BmsCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.h new file mode 100644 index 0000000..56bc7a8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + BmsCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.hpp new file mode 100644 index 0000000..79bb6ba --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_cmd__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_CMD__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_CMD__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + BmsCmd +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_CMD__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__builder.hpp new file mode 100644 index 0000000..0f747d6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__builder.hpp @@ -0,0 +1,183 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/bms_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_BmsState_cell_vol +{ +public: + explicit Init_BmsState_cell_vol(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + ::unitree_go::msg::BmsState cell_vol(::unitree_go::msg::BmsState::_cell_vol_type arg) + { + msg_.cell_vol = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_mcu_ntc +{ +public: + explicit Init_BmsState_mcu_ntc(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_cell_vol mcu_ntc(::unitree_go::msg::BmsState::_mcu_ntc_type arg) + { + msg_.mcu_ntc = std::move(arg); + return Init_BmsState_cell_vol(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_bq_ntc +{ +public: + explicit Init_BmsState_bq_ntc(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_mcu_ntc bq_ntc(::unitree_go::msg::BmsState::_bq_ntc_type arg) + { + msg_.bq_ntc = std::move(arg); + return Init_BmsState_mcu_ntc(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_cycle +{ +public: + explicit Init_BmsState_cycle(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_bq_ntc cycle(::unitree_go::msg::BmsState::_cycle_type arg) + { + msg_.cycle = std::move(arg); + return Init_BmsState_bq_ntc(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_current +{ +public: + explicit Init_BmsState_current(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_cycle current(::unitree_go::msg::BmsState::_current_type arg) + { + msg_.current = std::move(arg); + return Init_BmsState_cycle(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_soc +{ +public: + explicit Init_BmsState_soc(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_current soc(::unitree_go::msg::BmsState::_soc_type arg) + { + msg_.soc = std::move(arg); + return Init_BmsState_current(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_status +{ +public: + explicit Init_BmsState_status(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_soc status(::unitree_go::msg::BmsState::_status_type arg) + { + msg_.status = std::move(arg); + return Init_BmsState_soc(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_version_low +{ +public: + explicit Init_BmsState_version_low(::unitree_go::msg::BmsState & msg) + : msg_(msg) + {} + Init_BmsState_status version_low(::unitree_go::msg::BmsState::_version_low_type arg) + { + msg_.version_low = std::move(arg); + return Init_BmsState_status(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +class Init_BmsState_version_high +{ +public: + Init_BmsState_version_high() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_BmsState_version_low version_high(::unitree_go::msg::BmsState::_version_high_type arg) + { + msg_.version_high = std::move(arg); + return Init_BmsState_version_low(msg_); + } + +private: + ::unitree_go::msg::BmsState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::BmsState>() +{ + return unitree_go::msg::builder::Init_BmsState_version_high(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.c new file mode 100644 index 0000000..1f0a0ec --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.c @@ -0,0 +1,307 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/bms_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__BmsState__init(unitree_go__msg__BmsState * msg) +{ + if (!msg) { + return false; + } + // version_high + // version_low + // status + // soc + // current + // cycle + // bq_ntc + // mcu_ntc + // cell_vol + return true; +} + +void +unitree_go__msg__BmsState__fini(unitree_go__msg__BmsState * msg) +{ + if (!msg) { + return; + } + // version_high + // version_low + // status + // soc + // current + // cycle + // bq_ntc + // mcu_ntc + // cell_vol +} + +bool +unitree_go__msg__BmsState__are_equal(const unitree_go__msg__BmsState * lhs, const unitree_go__msg__BmsState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // version_high + if (lhs->version_high != rhs->version_high) { + return false; + } + // version_low + if (lhs->version_low != rhs->version_low) { + return false; + } + // status + if (lhs->status != rhs->status) { + return false; + } + // soc + if (lhs->soc != rhs->soc) { + return false; + } + // current + if (lhs->current != rhs->current) { + return false; + } + // cycle + if (lhs->cycle != rhs->cycle) { + return false; + } + // bq_ntc + for (size_t i = 0; i < 2; ++i) { + if (lhs->bq_ntc[i] != rhs->bq_ntc[i]) { + return false; + } + } + // mcu_ntc + for (size_t i = 0; i < 2; ++i) { + if (lhs->mcu_ntc[i] != rhs->mcu_ntc[i]) { + return false; + } + } + // cell_vol + for (size_t i = 0; i < 15; ++i) { + if (lhs->cell_vol[i] != rhs->cell_vol[i]) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__BmsState__copy( + const unitree_go__msg__BmsState * input, + unitree_go__msg__BmsState * output) +{ + if (!input || !output) { + return false; + } + // version_high + output->version_high = input->version_high; + // version_low + output->version_low = input->version_low; + // status + output->status = input->status; + // soc + output->soc = input->soc; + // current + output->current = input->current; + // cycle + output->cycle = input->cycle; + // bq_ntc + for (size_t i = 0; i < 2; ++i) { + output->bq_ntc[i] = input->bq_ntc[i]; + } + // mcu_ntc + for (size_t i = 0; i < 2; ++i) { + output->mcu_ntc[i] = input->mcu_ntc[i]; + } + // cell_vol + for (size_t i = 0; i < 15; ++i) { + output->cell_vol[i] = input->cell_vol[i]; + } + return true; +} + +unitree_go__msg__BmsState * +unitree_go__msg__BmsState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__BmsState * msg = (unitree_go__msg__BmsState *)allocator.allocate(sizeof(unitree_go__msg__BmsState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__BmsState)); + bool success = unitree_go__msg__BmsState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__BmsState__destroy(unitree_go__msg__BmsState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__BmsState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__BmsState__Sequence__init(unitree_go__msg__BmsState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__BmsState * data = NULL; + + if (size) { + data = (unitree_go__msg__BmsState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__BmsState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__BmsState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__BmsState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__BmsState__Sequence__fini(unitree_go__msg__BmsState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__BmsState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__BmsState__Sequence * +unitree_go__msg__BmsState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__BmsState__Sequence * array = (unitree_go__msg__BmsState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__BmsState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__BmsState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__BmsState__Sequence__destroy(unitree_go__msg__BmsState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__BmsState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__BmsState__Sequence__are_equal(const unitree_go__msg__BmsState__Sequence * lhs, const unitree_go__msg__BmsState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__BmsState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__BmsState__Sequence__copy( + const unitree_go__msg__BmsState__Sequence * input, + unitree_go__msg__BmsState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__BmsState); + unitree_go__msg__BmsState * data = + (unitree_go__msg__BmsState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__BmsState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__BmsState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__BmsState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.h new file mode 100644 index 0000000..0e3dc72 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/bms_state__struct.h" + +/// Initialize msg/BmsState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__BmsState + * )) before or use + * unitree_go__msg__BmsState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsState__init(unitree_go__msg__BmsState * msg); + +/// Finalize msg/BmsState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsState__fini(unitree_go__msg__BmsState * msg); + +/// Create msg/BmsState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__BmsState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__BmsState * +unitree_go__msg__BmsState__create(); + +/// Destroy msg/BmsState message. +/** + * It calls + * unitree_go__msg__BmsState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsState__destroy(unitree_go__msg__BmsState * msg); + +/// Check for msg/BmsState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsState__are_equal(const unitree_go__msg__BmsState * lhs, const unitree_go__msg__BmsState * rhs); + +/// Copy a msg/BmsState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsState__copy( + const unitree_go__msg__BmsState * input, + unitree_go__msg__BmsState * output); + +/// Initialize array of msg/BmsState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__BmsState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsState__Sequence__init(unitree_go__msg__BmsState__Sequence * array, size_t size); + +/// Finalize array of msg/BmsState messages. +/** + * It calls + * unitree_go__msg__BmsState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsState__Sequence__fini(unitree_go__msg__BmsState__Sequence * array); + +/// Create array of msg/BmsState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__BmsState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__BmsState__Sequence * +unitree_go__msg__BmsState__Sequence__create(size_t size); + +/// Destroy array of msg/BmsState messages. +/** + * It calls + * unitree_go__msg__BmsState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__BmsState__Sequence__destroy(unitree_go__msg__BmsState__Sequence * array); + +/// Check for msg/BmsState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsState__Sequence__are_equal(const unitree_go__msg__BmsState__Sequence * lhs, const unitree_go__msg__BmsState__Sequence * rhs); + +/// Copy an array of msg/BmsState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__BmsState__Sequence__copy( + const unitree_go__msg__BmsState__Sequence * input, + unitree_go__msg__BmsState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..3de157d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__BmsState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__BmsState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, BmsState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..eede409 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/bms_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::BmsState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::BmsState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::BmsState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_BmsState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, BmsState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..c18b944 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..05d7362 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, BmsState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.h new file mode 100644 index 0000000..871e4bd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.h @@ -0,0 +1,48 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/BmsState in the package unitree_go. +typedef struct unitree_go__msg__BmsState +{ + uint8_t version_high; + uint8_t version_low; + uint8_t status; + uint8_t soc; + int32_t current; + uint16_t cycle; + int8_t bq_ntc[2]; + int8_t mcu_ntc[2]; + uint16_t cell_vol[15]; +} unitree_go__msg__BmsState; + +// Struct for a sequence of unitree_go__msg__BmsState. +typedef struct unitree_go__msg__BmsState__Sequence +{ + unitree_go__msg__BmsState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__BmsState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.hpp new file mode 100644 index 0000000..ebf76be --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__struct.hpp @@ -0,0 +1,244 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__BmsState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__BmsState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct BmsState_ +{ + using Type = BmsState_; + + explicit BmsState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->version_high = 0; + this->version_low = 0; + this->status = 0; + this->soc = 0; + this->current = 0l; + this->cycle = 0; + std::fill::iterator, int8_t>(this->bq_ntc.begin(), this->bq_ntc.end(), 0); + std::fill::iterator, int8_t>(this->mcu_ntc.begin(), this->mcu_ntc.end(), 0); + std::fill::iterator, uint16_t>(this->cell_vol.begin(), this->cell_vol.end(), 0); + } + } + + explicit BmsState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : bq_ntc(_alloc), + mcu_ntc(_alloc), + cell_vol(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->version_high = 0; + this->version_low = 0; + this->status = 0; + this->soc = 0; + this->current = 0l; + this->cycle = 0; + std::fill::iterator, int8_t>(this->bq_ntc.begin(), this->bq_ntc.end(), 0); + std::fill::iterator, int8_t>(this->mcu_ntc.begin(), this->mcu_ntc.end(), 0); + std::fill::iterator, uint16_t>(this->cell_vol.begin(), this->cell_vol.end(), 0); + } + } + + // field types and members + using _version_high_type = + uint8_t; + _version_high_type version_high; + using _version_low_type = + uint8_t; + _version_low_type version_low; + using _status_type = + uint8_t; + _status_type status; + using _soc_type = + uint8_t; + _soc_type soc; + using _current_type = + int32_t; + _current_type current; + using _cycle_type = + uint16_t; + _cycle_type cycle; + using _bq_ntc_type = + std::array; + _bq_ntc_type bq_ntc; + using _mcu_ntc_type = + std::array; + _mcu_ntc_type mcu_ntc; + using _cell_vol_type = + std::array; + _cell_vol_type cell_vol; + + // setters for named parameter idiom + Type & set__version_high( + const uint8_t & _arg) + { + this->version_high = _arg; + return *this; + } + Type & set__version_low( + const uint8_t & _arg) + { + this->version_low = _arg; + return *this; + } + Type & set__status( + const uint8_t & _arg) + { + this->status = _arg; + return *this; + } + Type & set__soc( + const uint8_t & _arg) + { + this->soc = _arg; + return *this; + } + Type & set__current( + const int32_t & _arg) + { + this->current = _arg; + return *this; + } + Type & set__cycle( + const uint16_t & _arg) + { + this->cycle = _arg; + return *this; + } + Type & set__bq_ntc( + const std::array & _arg) + { + this->bq_ntc = _arg; + return *this; + } + Type & set__mcu_ntc( + const std::array & _arg) + { + this->mcu_ntc = _arg; + return *this; + } + Type & set__cell_vol( + const std::array & _arg) + { + this->cell_vol = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::BmsState_ *; + using ConstRawPtr = + const unitree_go::msg::BmsState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__BmsState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__BmsState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const BmsState_ & other) const + { + if (this->version_high != other.version_high) { + return false; + } + if (this->version_low != other.version_low) { + return false; + } + if (this->status != other.status) { + return false; + } + if (this->soc != other.soc) { + return false; + } + if (this->current != other.current) { + return false; + } + if (this->cycle != other.cycle) { + return false; + } + if (this->bq_ntc != other.bq_ntc) { + return false; + } + if (this->mcu_ntc != other.mcu_ntc) { + return false; + } + if (this->cell_vol != other.cell_vol) { + return false; + } + return true; + } + bool operator!=(const BmsState_ & other) const + { + return !this->operator==(other); + } +}; // struct BmsState_ + +// alias to use template instance with default allocator +using BmsState = + unitree_go::msg::BmsState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__traits.hpp new file mode 100644 index 0000000..1622215 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/bms_state__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::BmsState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/BmsState"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.c new file mode 100644 index 0000000..1884c9d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.c @@ -0,0 +1,201 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/bms_state__functions.h" +#include "unitree_go/msg/detail/bms_state__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void BmsState__rosidl_typesupport_introspection_c__BmsState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__BmsState__init(message_memory); +} + +void BmsState__rosidl_typesupport_introspection_c__BmsState_fini_function(void * message_memory) +{ + unitree_go__msg__BmsState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember BmsState__rosidl_typesupport_introspection_c__BmsState_message_member_array[9] = { + { + "version_high", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, version_high), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "version_low", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, version_low), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "status", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, status), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "soc", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, soc), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "current", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, current), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "cycle", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT16, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, cycle), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bq_ntc", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, bq_ntc), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "mcu_ntc", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, mcu_ntc), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "cell_vol", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT16, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 15, // array size + false, // is upper bound + offsetof(unitree_go__msg__BmsState, cell_vol), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers BmsState__rosidl_typesupport_introspection_c__BmsState_message_members = { + "unitree_go__msg", // message namespace + "BmsState", // message name + 9, // number of fields + sizeof(unitree_go__msg__BmsState), + BmsState__rosidl_typesupport_introspection_c__BmsState_message_member_array, // message members + BmsState__rosidl_typesupport_introspection_c__BmsState_init_function, // function to initialize message memory (memory has to be allocated) + BmsState__rosidl_typesupport_introspection_c__BmsState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t BmsState__rosidl_typesupport_introspection_c__BmsState_message_type_support_handle = { + 0, + &BmsState__rosidl_typesupport_introspection_c__BmsState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsState)() { + if (!BmsState__rosidl_typesupport_introspection_c__BmsState_message_type_support_handle.typesupport_identifier) { + BmsState__rosidl_typesupport_introspection_c__BmsState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &BmsState__rosidl_typesupport_introspection_c__BmsState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.cpp new file mode 100644 index 0000000..36d016c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.cpp @@ -0,0 +1,287 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/bms_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void BmsState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::BmsState(_init); +} + +void BmsState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~BmsState(); +} + +size_t size_function__BmsState__bq_ntc(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__BmsState__bq_ntc(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__BmsState__bq_ntc(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__BmsState__mcu_ntc(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__BmsState__mcu_ntc(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__BmsState__mcu_ntc(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__BmsState__cell_vol(const void * untyped_member) +{ + (void)untyped_member; + return 15; +} + +const void * get_const_function__BmsState__cell_vol(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__BmsState__cell_vol(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember BmsState_message_member_array[9] = { + { + "version_high", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, version_high), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "version_low", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, version_low), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "status", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, status), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "soc", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, soc), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "current", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, current), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "cycle", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT16, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, cycle), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bq_ntc", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, bq_ntc), // bytes offset in struct + nullptr, // default value + size_function__BmsState__bq_ntc, // size() function pointer + get_const_function__BmsState__bq_ntc, // get_const(index) function pointer + get_function__BmsState__bq_ntc, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "mcu_ntc", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, mcu_ntc), // bytes offset in struct + nullptr, // default value + size_function__BmsState__mcu_ntc, // size() function pointer + get_const_function__BmsState__mcu_ntc, // get_const(index) function pointer + get_function__BmsState__mcu_ntc, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "cell_vol", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT16, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 15, // array size + false, // is upper bound + offsetof(unitree_go::msg::BmsState, cell_vol), // bytes offset in struct + nullptr, // default value + size_function__BmsState__cell_vol, // size() function pointer + get_const_function__BmsState__cell_vol, // get_const(index) function pointer + get_function__BmsState__cell_vol, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers BmsState_message_members = { + "unitree_go::msg", // message namespace + "BmsState", // message name + 9, // number of fields + sizeof(unitree_go::msg::BmsState), + BmsState_message_member_array, // message members + BmsState_init_function, // function to initialize message memory (memory has to be allocated) + BmsState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t BmsState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &BmsState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::BmsState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, BmsState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::BmsState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.h new file mode 100644 index 0000000..73d2256 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + BmsState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.hpp new file mode 100644 index 0000000..6cc54fd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/bms_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__BMS_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__BMS_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + BmsState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__BMS_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__builder.hpp new file mode 100644 index 0000000..e05b854 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__ERROR__BUILDER_HPP_ + +#include "unitree_go/msg/detail/error__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Error_state +{ +public: + explicit Init_Error_state(::unitree_go::msg::Error & msg) + : msg_(msg) + {} + ::unitree_go::msg::Error state(::unitree_go::msg::Error::_state_type arg) + { + msg_.state = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::Error msg_; +}; + +class Init_Error_source +{ +public: + Init_Error_source() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Error_state source(::unitree_go::msg::Error::_source_type arg) + { + msg_.source = std::move(arg); + return Init_Error_state(msg_); + } + +private: + ::unitree_go::msg::Error msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::Error>() +{ + return unitree_go::msg::builder::Init_Error_source(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.c new file mode 100644 index 0000000..3cc186a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.c @@ -0,0 +1,239 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/error__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__Error__init(unitree_go__msg__Error * msg) +{ + if (!msg) { + return false; + } + // source + // state + return true; +} + +void +unitree_go__msg__Error__fini(unitree_go__msg__Error * msg) +{ + if (!msg) { + return; + } + // source + // state +} + +bool +unitree_go__msg__Error__are_equal(const unitree_go__msg__Error * lhs, const unitree_go__msg__Error * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // source + if (lhs->source != rhs->source) { + return false; + } + // state + if (lhs->state != rhs->state) { + return false; + } + return true; +} + +bool +unitree_go__msg__Error__copy( + const unitree_go__msg__Error * input, + unitree_go__msg__Error * output) +{ + if (!input || !output) { + return false; + } + // source + output->source = input->source; + // state + output->state = input->state; + return true; +} + +unitree_go__msg__Error * +unitree_go__msg__Error__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Error * msg = (unitree_go__msg__Error *)allocator.allocate(sizeof(unitree_go__msg__Error), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__Error)); + bool success = unitree_go__msg__Error__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__Error__destroy(unitree_go__msg__Error * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__Error__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__Error__Sequence__init(unitree_go__msg__Error__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Error * data = NULL; + + if (size) { + data = (unitree_go__msg__Error *)allocator.zero_allocate(size, sizeof(unitree_go__msg__Error), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__Error__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__Error__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__Error__Sequence__fini(unitree_go__msg__Error__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__Error__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__Error__Sequence * +unitree_go__msg__Error__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Error__Sequence * array = (unitree_go__msg__Error__Sequence *)allocator.allocate(sizeof(unitree_go__msg__Error__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__Error__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__Error__Sequence__destroy(unitree_go__msg__Error__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__Error__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__Error__Sequence__are_equal(const unitree_go__msg__Error__Sequence * lhs, const unitree_go__msg__Error__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__Error__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__Error__Sequence__copy( + const unitree_go__msg__Error__Sequence * input, + unitree_go__msg__Error__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__Error); + unitree_go__msg__Error * data = + (unitree_go__msg__Error *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__Error__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__Error__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__Error__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.h new file mode 100644 index 0000000..41ac606 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__ERROR__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/error__struct.h" + +/// Initialize msg/Error message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__Error + * )) before or use + * unitree_go__msg__Error__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Error__init(unitree_go__msg__Error * msg); + +/// Finalize msg/Error message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Error__fini(unitree_go__msg__Error * msg); + +/// Create msg/Error message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__Error__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Error * +unitree_go__msg__Error__create(); + +/// Destroy msg/Error message. +/** + * It calls + * unitree_go__msg__Error__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Error__destroy(unitree_go__msg__Error * msg); + +/// Check for msg/Error message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Error__are_equal(const unitree_go__msg__Error * lhs, const unitree_go__msg__Error * rhs); + +/// Copy a msg/Error message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Error__copy( + const unitree_go__msg__Error * input, + unitree_go__msg__Error * output); + +/// Initialize array of msg/Error messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__Error__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Error__Sequence__init(unitree_go__msg__Error__Sequence * array, size_t size); + +/// Finalize array of msg/Error messages. +/** + * It calls + * unitree_go__msg__Error__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Error__Sequence__fini(unitree_go__msg__Error__Sequence * array); + +/// Create array of msg/Error messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__Error__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Error__Sequence * +unitree_go__msg__Error__Sequence__create(size_t size); + +/// Destroy array of msg/Error messages. +/** + * It calls + * unitree_go__msg__Error__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Error__Sequence__destroy(unitree_go__msg__Error__Sequence * array); + +/// Check for msg/Error message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Error__Sequence__are_equal(const unitree_go__msg__Error__Sequence * lhs, const unitree_go__msg__Error__Sequence * rhs); + +/// Copy an array of msg/Error messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Error__Sequence__copy( + const unitree_go__msg__Error__Sequence * input, + unitree_go__msg__Error__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..269b6b6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__Error( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__Error( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, Error)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..7ec5407 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/error__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::Error & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::Error & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::Error & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_Error( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, Error)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..007d6ab --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Error)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..fe36165 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Error)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.h new file mode 100644 index 0000000..868464f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.h @@ -0,0 +1,41 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__ERROR__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/Error in the package unitree_go. +typedef struct unitree_go__msg__Error +{ + uint32_t source; + uint32_t state; +} unitree_go__msg__Error; + +// Struct for a sequence of unitree_go__msg__Error. +typedef struct unitree_go__msg__Error__Sequence +{ + unitree_go__msg__Error * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__Error__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.hpp new file mode 100644 index 0000000..31658a8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__struct.hpp @@ -0,0 +1,144 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__ERROR__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__Error __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__Error __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct Error_ +{ + using Type = Error_; + + explicit Error_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->source = 0ul; + this->state = 0ul; + } + } + + explicit Error_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->source = 0ul; + this->state = 0ul; + } + } + + // field types and members + using _source_type = + uint32_t; + _source_type source; + using _state_type = + uint32_t; + _state_type state; + + // setters for named parameter idiom + Type & set__source( + const uint32_t & _arg) + { + this->source = _arg; + return *this; + } + Type & set__state( + const uint32_t & _arg) + { + this->state = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::Error_ *; + using ConstRawPtr = + const unitree_go::msg::Error_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__Error + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__Error + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Error_ & other) const + { + if (this->source != other.source) { + return false; + } + if (this->state != other.state) { + return false; + } + return true; + } + bool operator!=(const Error_ & other) const + { + return !this->operator==(other); + } +}; // struct Error_ + +// alias to use template instance with default allocator +using Error = + unitree_go::msg::Error_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__traits.hpp new file mode 100644 index 0000000..e867f5e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__ERROR__TRAITS_HPP_ + +#include "unitree_go/msg/detail/error__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::Error"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/Error"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.c new file mode 100644 index 0000000..f6e5856 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.c @@ -0,0 +1,96 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/error__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/error__functions.h" +#include "unitree_go/msg/detail/error__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Error__rosidl_typesupport_introspection_c__Error_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__Error__init(message_memory); +} + +void Error__rosidl_typesupport_introspection_c__Error_fini_function(void * message_memory) +{ + unitree_go__msg__Error__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Error__rosidl_typesupport_introspection_c__Error_message_member_array[2] = { + { + "source", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Error, source), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Error, state), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Error__rosidl_typesupport_introspection_c__Error_message_members = { + "unitree_go__msg", // message namespace + "Error", // message name + 2, // number of fields + sizeof(unitree_go__msg__Error), + Error__rosidl_typesupport_introspection_c__Error_message_member_array, // message members + Error__rosidl_typesupport_introspection_c__Error_init_function, // function to initialize message memory (memory has to be allocated) + Error__rosidl_typesupport_introspection_c__Error_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Error__rosidl_typesupport_introspection_c__Error_message_type_support_handle = { + 0, + &Error__rosidl_typesupport_introspection_c__Error_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Error)() { + if (!Error__rosidl_typesupport_introspection_c__Error_message_type_support_handle.typesupport_identifier) { + Error__rosidl_typesupport_introspection_c__Error_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Error__rosidl_typesupport_introspection_c__Error_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.cpp new file mode 100644 index 0000000..018929d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.cpp @@ -0,0 +1,122 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/error__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Error_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::Error(_init); +} + +void Error_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Error(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Error_message_member_array[2] = { + { + "source", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Error, source), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Error, state), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Error_message_members = { + "unitree_go::msg", // message namespace + "Error", // message name + 2, // number of fields + sizeof(unitree_go::msg::Error), + Error_message_member_array, // message members + Error_init_function, // function to initialize message memory (memory has to be allocated) + Error_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Error_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Error_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Error_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Error)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Error_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.h new file mode 100644 index 0000000..3257200 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__ERROR__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + Error +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.hpp new file mode 100644 index 0000000..2080995 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/error__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__ERROR__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__ERROR__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + Error +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__ERROR__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__builder.hpp new file mode 100644 index 0000000..c11f19d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__builder.hpp @@ -0,0 +1,103 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__BUILDER_HPP_ + +#include "unitree_go/msg/detail/go2_front_video_data__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Go2FrontVideoData_video180p +{ +public: + explicit Init_Go2FrontVideoData_video180p(::unitree_go::msg::Go2FrontVideoData & msg) + : msg_(msg) + {} + ::unitree_go::msg::Go2FrontVideoData video180p(::unitree_go::msg::Go2FrontVideoData::_video180p_type arg) + { + msg_.video180p = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::Go2FrontVideoData msg_; +}; + +class Init_Go2FrontVideoData_video360p +{ +public: + explicit Init_Go2FrontVideoData_video360p(::unitree_go::msg::Go2FrontVideoData & msg) + : msg_(msg) + {} + Init_Go2FrontVideoData_video180p video360p(::unitree_go::msg::Go2FrontVideoData::_video360p_type arg) + { + msg_.video360p = std::move(arg); + return Init_Go2FrontVideoData_video180p(msg_); + } + +private: + ::unitree_go::msg::Go2FrontVideoData msg_; +}; + +class Init_Go2FrontVideoData_video720p +{ +public: + explicit Init_Go2FrontVideoData_video720p(::unitree_go::msg::Go2FrontVideoData & msg) + : msg_(msg) + {} + Init_Go2FrontVideoData_video360p video720p(::unitree_go::msg::Go2FrontVideoData::_video720p_type arg) + { + msg_.video720p = std::move(arg); + return Init_Go2FrontVideoData_video360p(msg_); + } + +private: + ::unitree_go::msg::Go2FrontVideoData msg_; +}; + +class Init_Go2FrontVideoData_time_frame +{ +public: + Init_Go2FrontVideoData_time_frame() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Go2FrontVideoData_video720p time_frame(::unitree_go::msg::Go2FrontVideoData::_time_frame_type arg) + { + msg_.time_frame = std::move(arg); + return Init_Go2FrontVideoData_video720p(msg_); + } + +private: + ::unitree_go::msg::Go2FrontVideoData msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::Go2FrontVideoData>() +{ + return unitree_go::msg::builder::Init_Go2FrontVideoData_time_frame(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.c new file mode 100644 index 0000000..af91c99 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.c @@ -0,0 +1,294 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/go2_front_video_data__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `video720p` +// Member `video360p` +// Member `video180p` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool +unitree_go__msg__Go2FrontVideoData__init(unitree_go__msg__Go2FrontVideoData * msg) +{ + if (!msg) { + return false; + } + // time_frame + // video720p + if (!rosidl_runtime_c__uint8__Sequence__init(&msg->video720p, 0)) { + unitree_go__msg__Go2FrontVideoData__fini(msg); + return false; + } + // video360p + if (!rosidl_runtime_c__uint8__Sequence__init(&msg->video360p, 0)) { + unitree_go__msg__Go2FrontVideoData__fini(msg); + return false; + } + // video180p + if (!rosidl_runtime_c__uint8__Sequence__init(&msg->video180p, 0)) { + unitree_go__msg__Go2FrontVideoData__fini(msg); + return false; + } + return true; +} + +void +unitree_go__msg__Go2FrontVideoData__fini(unitree_go__msg__Go2FrontVideoData * msg) +{ + if (!msg) { + return; + } + // time_frame + // video720p + rosidl_runtime_c__uint8__Sequence__fini(&msg->video720p); + // video360p + rosidl_runtime_c__uint8__Sequence__fini(&msg->video360p); + // video180p + rosidl_runtime_c__uint8__Sequence__fini(&msg->video180p); +} + +bool +unitree_go__msg__Go2FrontVideoData__are_equal(const unitree_go__msg__Go2FrontVideoData * lhs, const unitree_go__msg__Go2FrontVideoData * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // time_frame + if (lhs->time_frame != rhs->time_frame) { + return false; + } + // video720p + if (!rosidl_runtime_c__uint8__Sequence__are_equal( + &(lhs->video720p), &(rhs->video720p))) + { + return false; + } + // video360p + if (!rosidl_runtime_c__uint8__Sequence__are_equal( + &(lhs->video360p), &(rhs->video360p))) + { + return false; + } + // video180p + if (!rosidl_runtime_c__uint8__Sequence__are_equal( + &(lhs->video180p), &(rhs->video180p))) + { + return false; + } + return true; +} + +bool +unitree_go__msg__Go2FrontVideoData__copy( + const unitree_go__msg__Go2FrontVideoData * input, + unitree_go__msg__Go2FrontVideoData * output) +{ + if (!input || !output) { + return false; + } + // time_frame + output->time_frame = input->time_frame; + // video720p + if (!rosidl_runtime_c__uint8__Sequence__copy( + &(input->video720p), &(output->video720p))) + { + return false; + } + // video360p + if (!rosidl_runtime_c__uint8__Sequence__copy( + &(input->video360p), &(output->video360p))) + { + return false; + } + // video180p + if (!rosidl_runtime_c__uint8__Sequence__copy( + &(input->video180p), &(output->video180p))) + { + return false; + } + return true; +} + +unitree_go__msg__Go2FrontVideoData * +unitree_go__msg__Go2FrontVideoData__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Go2FrontVideoData * msg = (unitree_go__msg__Go2FrontVideoData *)allocator.allocate(sizeof(unitree_go__msg__Go2FrontVideoData), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__Go2FrontVideoData)); + bool success = unitree_go__msg__Go2FrontVideoData__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__Go2FrontVideoData__destroy(unitree_go__msg__Go2FrontVideoData * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__Go2FrontVideoData__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__Go2FrontVideoData__Sequence__init(unitree_go__msg__Go2FrontVideoData__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Go2FrontVideoData * data = NULL; + + if (size) { + data = (unitree_go__msg__Go2FrontVideoData *)allocator.zero_allocate(size, sizeof(unitree_go__msg__Go2FrontVideoData), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__Go2FrontVideoData__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__Go2FrontVideoData__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__Go2FrontVideoData__Sequence__fini(unitree_go__msg__Go2FrontVideoData__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__Go2FrontVideoData__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__Go2FrontVideoData__Sequence * +unitree_go__msg__Go2FrontVideoData__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Go2FrontVideoData__Sequence * array = (unitree_go__msg__Go2FrontVideoData__Sequence *)allocator.allocate(sizeof(unitree_go__msg__Go2FrontVideoData__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__Go2FrontVideoData__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__Go2FrontVideoData__Sequence__destroy(unitree_go__msg__Go2FrontVideoData__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__Go2FrontVideoData__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__Go2FrontVideoData__Sequence__are_equal(const unitree_go__msg__Go2FrontVideoData__Sequence * lhs, const unitree_go__msg__Go2FrontVideoData__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__Go2FrontVideoData__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__Go2FrontVideoData__Sequence__copy( + const unitree_go__msg__Go2FrontVideoData__Sequence * input, + unitree_go__msg__Go2FrontVideoData__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__Go2FrontVideoData); + unitree_go__msg__Go2FrontVideoData * data = + (unitree_go__msg__Go2FrontVideoData *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__Go2FrontVideoData__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__Go2FrontVideoData__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__Go2FrontVideoData__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.h new file mode 100644 index 0000000..e294419 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/go2_front_video_data__struct.h" + +/// Initialize msg/Go2FrontVideoData message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__Go2FrontVideoData + * )) before or use + * unitree_go__msg__Go2FrontVideoData__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Go2FrontVideoData__init(unitree_go__msg__Go2FrontVideoData * msg); + +/// Finalize msg/Go2FrontVideoData message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Go2FrontVideoData__fini(unitree_go__msg__Go2FrontVideoData * msg); + +/// Create msg/Go2FrontVideoData message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__Go2FrontVideoData__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Go2FrontVideoData * +unitree_go__msg__Go2FrontVideoData__create(); + +/// Destroy msg/Go2FrontVideoData message. +/** + * It calls + * unitree_go__msg__Go2FrontVideoData__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Go2FrontVideoData__destroy(unitree_go__msg__Go2FrontVideoData * msg); + +/// Check for msg/Go2FrontVideoData message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Go2FrontVideoData__are_equal(const unitree_go__msg__Go2FrontVideoData * lhs, const unitree_go__msg__Go2FrontVideoData * rhs); + +/// Copy a msg/Go2FrontVideoData message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Go2FrontVideoData__copy( + const unitree_go__msg__Go2FrontVideoData * input, + unitree_go__msg__Go2FrontVideoData * output); + +/// Initialize array of msg/Go2FrontVideoData messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__Go2FrontVideoData__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Go2FrontVideoData__Sequence__init(unitree_go__msg__Go2FrontVideoData__Sequence * array, size_t size); + +/// Finalize array of msg/Go2FrontVideoData messages. +/** + * It calls + * unitree_go__msg__Go2FrontVideoData__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Go2FrontVideoData__Sequence__fini(unitree_go__msg__Go2FrontVideoData__Sequence * array); + +/// Create array of msg/Go2FrontVideoData messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__Go2FrontVideoData__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Go2FrontVideoData__Sequence * +unitree_go__msg__Go2FrontVideoData__Sequence__create(size_t size); + +/// Destroy array of msg/Go2FrontVideoData messages. +/** + * It calls + * unitree_go__msg__Go2FrontVideoData__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Go2FrontVideoData__Sequence__destroy(unitree_go__msg__Go2FrontVideoData__Sequence * array); + +/// Check for msg/Go2FrontVideoData message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Go2FrontVideoData__Sequence__are_equal(const unitree_go__msg__Go2FrontVideoData__Sequence * lhs, const unitree_go__msg__Go2FrontVideoData__Sequence * rhs); + +/// Copy an array of msg/Go2FrontVideoData messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Go2FrontVideoData__Sequence__copy( + const unitree_go__msg__Go2FrontVideoData__Sequence * input, + unitree_go__msg__Go2FrontVideoData__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..4786d45 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__Go2FrontVideoData( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__Go2FrontVideoData( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, Go2FrontVideoData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..a93e5c9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/go2_front_video_data__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::Go2FrontVideoData & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::Go2FrontVideoData & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::Go2FrontVideoData & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_Go2FrontVideoData( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, Go2FrontVideoData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..276f2f0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Go2FrontVideoData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..2f15fa2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Go2FrontVideoData)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.h new file mode 100644 index 0000000..6c4b665 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.h @@ -0,0 +1,49 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'video720p' +// Member 'video360p' +// Member 'video180p' +#include "rosidl_runtime_c/primitives_sequence.h" + +// Struct defined in msg/Go2FrontVideoData in the package unitree_go. +typedef struct unitree_go__msg__Go2FrontVideoData +{ + uint64_t time_frame; + rosidl_runtime_c__uint8__Sequence video720p; + rosidl_runtime_c__uint8__Sequence video360p; + rosidl_runtime_c__uint8__Sequence video180p; +} unitree_go__msg__Go2FrontVideoData; + +// Struct for a sequence of unitree_go__msg__Go2FrontVideoData. +typedef struct unitree_go__msg__Go2FrontVideoData__Sequence +{ + unitree_go__msg__Go2FrontVideoData * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__Go2FrontVideoData__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.hpp new file mode 100644 index 0000000..f7e5b85 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__struct.hpp @@ -0,0 +1,166 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__Go2FrontVideoData __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__Go2FrontVideoData __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct Go2FrontVideoData_ +{ + using Type = Go2FrontVideoData_; + + explicit Go2FrontVideoData_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->time_frame = 0ull; + } + } + + explicit Go2FrontVideoData_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->time_frame = 0ull; + } + } + + // field types and members + using _time_frame_type = + uint64_t; + _time_frame_type time_frame; + using _video720p_type = + std::vector::other>; + _video720p_type video720p; + using _video360p_type = + std::vector::other>; + _video360p_type video360p; + using _video180p_type = + std::vector::other>; + _video180p_type video180p; + + // setters for named parameter idiom + Type & set__time_frame( + const uint64_t & _arg) + { + this->time_frame = _arg; + return *this; + } + Type & set__video720p( + const std::vector::other> & _arg) + { + this->video720p = _arg; + return *this; + } + Type & set__video360p( + const std::vector::other> & _arg) + { + this->video360p = _arg; + return *this; + } + Type & set__video180p( + const std::vector::other> & _arg) + { + this->video180p = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::Go2FrontVideoData_ *; + using ConstRawPtr = + const unitree_go::msg::Go2FrontVideoData_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__Go2FrontVideoData + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__Go2FrontVideoData + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Go2FrontVideoData_ & other) const + { + if (this->time_frame != other.time_frame) { + return false; + } + if (this->video720p != other.video720p) { + return false; + } + if (this->video360p != other.video360p) { + return false; + } + if (this->video180p != other.video180p) { + return false; + } + return true; + } + bool operator!=(const Go2FrontVideoData_ & other) const + { + return !this->operator==(other); + } +}; // struct Go2FrontVideoData_ + +// alias to use template instance with default allocator +using Go2FrontVideoData = + unitree_go::msg::Go2FrontVideoData_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__traits.hpp new file mode 100644 index 0000000..db0046a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TRAITS_HPP_ + +#include "unitree_go/msg/detail/go2_front_video_data__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::Go2FrontVideoData"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/Go2FrontVideoData"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.c new file mode 100644 index 0000000..c6be76c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.c @@ -0,0 +1,132 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/go2_front_video_data__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/go2_front_video_data__functions.h" +#include "unitree_go/msg/detail/go2_front_video_data__struct.h" + + +// Include directives for member types +// Member `video720p` +// Member `video360p` +// Member `video180p` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__Go2FrontVideoData__init(message_memory); +} + +void Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_fini_function(void * message_memory) +{ + unitree_go__msg__Go2FrontVideoData__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_member_array[4] = { + { + "time_frame", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT64, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Go2FrontVideoData, time_frame), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "video720p", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Go2FrontVideoData, video720p), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "video360p", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Go2FrontVideoData, video360p), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "video180p", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Go2FrontVideoData, video180p), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_members = { + "unitree_go__msg", // message namespace + "Go2FrontVideoData", // message name + 4, // number of fields + sizeof(unitree_go__msg__Go2FrontVideoData), + Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_member_array, // message members + Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_init_function, // function to initialize message memory (memory has to be allocated) + Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_type_support_handle = { + 0, + &Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Go2FrontVideoData)() { + if (!Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_type_support_handle.typesupport_identifier) { + Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Go2FrontVideoData__rosidl_typesupport_introspection_c__Go2FrontVideoData_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.cpp new file mode 100644 index 0000000..a10ddeb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.cpp @@ -0,0 +1,233 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/go2_front_video_data__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Go2FrontVideoData_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::Go2FrontVideoData(_init); +} + +void Go2FrontVideoData_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Go2FrontVideoData(); +} + +size_t size_function__Go2FrontVideoData__video720p(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__Go2FrontVideoData__video720p(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__Go2FrontVideoData__video720p(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__Go2FrontVideoData__video720p(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +size_t size_function__Go2FrontVideoData__video360p(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__Go2FrontVideoData__video360p(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__Go2FrontVideoData__video360p(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__Go2FrontVideoData__video360p(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +size_t size_function__Go2FrontVideoData__video180p(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__Go2FrontVideoData__video180p(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__Go2FrontVideoData__video180p(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__Go2FrontVideoData__video180p(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Go2FrontVideoData_message_member_array[4] = { + { + "time_frame", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT64, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Go2FrontVideoData, time_frame), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "video720p", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Go2FrontVideoData, video720p), // bytes offset in struct + nullptr, // default value + size_function__Go2FrontVideoData__video720p, // size() function pointer + get_const_function__Go2FrontVideoData__video720p, // get_const(index) function pointer + get_function__Go2FrontVideoData__video720p, // get(index) function pointer + resize_function__Go2FrontVideoData__video720p // resize(index) function pointer + }, + { + "video360p", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Go2FrontVideoData, video360p), // bytes offset in struct + nullptr, // default value + size_function__Go2FrontVideoData__video360p, // size() function pointer + get_const_function__Go2FrontVideoData__video360p, // get_const(index) function pointer + get_function__Go2FrontVideoData__video360p, // get(index) function pointer + resize_function__Go2FrontVideoData__video360p // resize(index) function pointer + }, + { + "video180p", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Go2FrontVideoData, video180p), // bytes offset in struct + nullptr, // default value + size_function__Go2FrontVideoData__video180p, // size() function pointer + get_const_function__Go2FrontVideoData__video180p, // get_const(index) function pointer + get_function__Go2FrontVideoData__video180p, // get(index) function pointer + resize_function__Go2FrontVideoData__video180p // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Go2FrontVideoData_message_members = { + "unitree_go::msg", // message namespace + "Go2FrontVideoData", // message name + 4, // number of fields + sizeof(unitree_go::msg::Go2FrontVideoData), + Go2FrontVideoData_message_member_array, // message members + Go2FrontVideoData_init_function, // function to initialize message memory (memory has to be allocated) + Go2FrontVideoData_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Go2FrontVideoData_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Go2FrontVideoData_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Go2FrontVideoData_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Go2FrontVideoData)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Go2FrontVideoData_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.h new file mode 100644 index 0000000..3529f31 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + Go2FrontVideoData +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.hpp new file mode 100644 index 0000000..83f0a58 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/go2_front_video_data__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + Go2FrontVideoData +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__GO2_FRONT_VIDEO_DATA__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__builder.hpp new file mode 100644 index 0000000..fbbddaa --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__builder.hpp @@ -0,0 +1,151 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__BUILDER_HPP_ + +#include "unitree_go/msg/detail/height_map__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_HeightMap_data +{ +public: + explicit Init_HeightMap_data(::unitree_go::msg::HeightMap & msg) + : msg_(msg) + {} + ::unitree_go::msg::HeightMap data(::unitree_go::msg::HeightMap::_data_type arg) + { + msg_.data = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +class Init_HeightMap_origin +{ +public: + explicit Init_HeightMap_origin(::unitree_go::msg::HeightMap & msg) + : msg_(msg) + {} + Init_HeightMap_data origin(::unitree_go::msg::HeightMap::_origin_type arg) + { + msg_.origin = std::move(arg); + return Init_HeightMap_data(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +class Init_HeightMap_height +{ +public: + explicit Init_HeightMap_height(::unitree_go::msg::HeightMap & msg) + : msg_(msg) + {} + Init_HeightMap_origin height(::unitree_go::msg::HeightMap::_height_type arg) + { + msg_.height = std::move(arg); + return Init_HeightMap_origin(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +class Init_HeightMap_width +{ +public: + explicit Init_HeightMap_width(::unitree_go::msg::HeightMap & msg) + : msg_(msg) + {} + Init_HeightMap_height width(::unitree_go::msg::HeightMap::_width_type arg) + { + msg_.width = std::move(arg); + return Init_HeightMap_height(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +class Init_HeightMap_resolution +{ +public: + explicit Init_HeightMap_resolution(::unitree_go::msg::HeightMap & msg) + : msg_(msg) + {} + Init_HeightMap_width resolution(::unitree_go::msg::HeightMap::_resolution_type arg) + { + msg_.resolution = std::move(arg); + return Init_HeightMap_width(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +class Init_HeightMap_frame_id +{ +public: + explicit Init_HeightMap_frame_id(::unitree_go::msg::HeightMap & msg) + : msg_(msg) + {} + Init_HeightMap_resolution frame_id(::unitree_go::msg::HeightMap::_frame_id_type arg) + { + msg_.frame_id = std::move(arg); + return Init_HeightMap_resolution(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +class Init_HeightMap_stamp +{ +public: + Init_HeightMap_stamp() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_HeightMap_frame_id stamp(::unitree_go::msg::HeightMap::_stamp_type arg) + { + msg_.stamp = std::move(arg); + return Init_HeightMap_frame_id(msg_); + } + +private: + ::unitree_go::msg::HeightMap msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::HeightMap>() +{ + return unitree_go::msg::builder::Init_HeightMap_stamp(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.c new file mode 100644 index 0000000..f3540b8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.c @@ -0,0 +1,311 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/height_map__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `frame_id` +#include "rosidl_runtime_c/string_functions.h" +// Member `data` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool +unitree_go__msg__HeightMap__init(unitree_go__msg__HeightMap * msg) +{ + if (!msg) { + return false; + } + // stamp + // frame_id + if (!rosidl_runtime_c__String__init(&msg->frame_id)) { + unitree_go__msg__HeightMap__fini(msg); + return false; + } + // resolution + // width + // height + // origin + // data + if (!rosidl_runtime_c__float__Sequence__init(&msg->data, 0)) { + unitree_go__msg__HeightMap__fini(msg); + return false; + } + return true; +} + +void +unitree_go__msg__HeightMap__fini(unitree_go__msg__HeightMap * msg) +{ + if (!msg) { + return; + } + // stamp + // frame_id + rosidl_runtime_c__String__fini(&msg->frame_id); + // resolution + // width + // height + // origin + // data + rosidl_runtime_c__float__Sequence__fini(&msg->data); +} + +bool +unitree_go__msg__HeightMap__are_equal(const unitree_go__msg__HeightMap * lhs, const unitree_go__msg__HeightMap * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // stamp + if (lhs->stamp != rhs->stamp) { + return false; + } + // frame_id + if (!rosidl_runtime_c__String__are_equal( + &(lhs->frame_id), &(rhs->frame_id))) + { + return false; + } + // resolution + if (lhs->resolution != rhs->resolution) { + return false; + } + // width + if (lhs->width != rhs->width) { + return false; + } + // height + if (lhs->height != rhs->height) { + return false; + } + // origin + for (size_t i = 0; i < 2; ++i) { + if (lhs->origin[i] != rhs->origin[i]) { + return false; + } + } + // data + if (!rosidl_runtime_c__float__Sequence__are_equal( + &(lhs->data), &(rhs->data))) + { + return false; + } + return true; +} + +bool +unitree_go__msg__HeightMap__copy( + const unitree_go__msg__HeightMap * input, + unitree_go__msg__HeightMap * output) +{ + if (!input || !output) { + return false; + } + // stamp + output->stamp = input->stamp; + // frame_id + if (!rosidl_runtime_c__String__copy( + &(input->frame_id), &(output->frame_id))) + { + return false; + } + // resolution + output->resolution = input->resolution; + // width + output->width = input->width; + // height + output->height = input->height; + // origin + for (size_t i = 0; i < 2; ++i) { + output->origin[i] = input->origin[i]; + } + // data + if (!rosidl_runtime_c__float__Sequence__copy( + &(input->data), &(output->data))) + { + return false; + } + return true; +} + +unitree_go__msg__HeightMap * +unitree_go__msg__HeightMap__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__HeightMap * msg = (unitree_go__msg__HeightMap *)allocator.allocate(sizeof(unitree_go__msg__HeightMap), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__HeightMap)); + bool success = unitree_go__msg__HeightMap__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__HeightMap__destroy(unitree_go__msg__HeightMap * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__HeightMap__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__HeightMap__Sequence__init(unitree_go__msg__HeightMap__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__HeightMap * data = NULL; + + if (size) { + data = (unitree_go__msg__HeightMap *)allocator.zero_allocate(size, sizeof(unitree_go__msg__HeightMap), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__HeightMap__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__HeightMap__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__HeightMap__Sequence__fini(unitree_go__msg__HeightMap__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__HeightMap__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__HeightMap__Sequence * +unitree_go__msg__HeightMap__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__HeightMap__Sequence * array = (unitree_go__msg__HeightMap__Sequence *)allocator.allocate(sizeof(unitree_go__msg__HeightMap__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__HeightMap__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__HeightMap__Sequence__destroy(unitree_go__msg__HeightMap__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__HeightMap__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__HeightMap__Sequence__are_equal(const unitree_go__msg__HeightMap__Sequence * lhs, const unitree_go__msg__HeightMap__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__HeightMap__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__HeightMap__Sequence__copy( + const unitree_go__msg__HeightMap__Sequence * input, + unitree_go__msg__HeightMap__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__HeightMap); + unitree_go__msg__HeightMap * data = + (unitree_go__msg__HeightMap *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__HeightMap__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__HeightMap__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__HeightMap__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.h new file mode 100644 index 0000000..7b8994d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/height_map__struct.h" + +/// Initialize msg/HeightMap message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__HeightMap + * )) before or use + * unitree_go__msg__HeightMap__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__HeightMap__init(unitree_go__msg__HeightMap * msg); + +/// Finalize msg/HeightMap message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__HeightMap__fini(unitree_go__msg__HeightMap * msg); + +/// Create msg/HeightMap message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__HeightMap__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__HeightMap * +unitree_go__msg__HeightMap__create(); + +/// Destroy msg/HeightMap message. +/** + * It calls + * unitree_go__msg__HeightMap__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__HeightMap__destroy(unitree_go__msg__HeightMap * msg); + +/// Check for msg/HeightMap message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__HeightMap__are_equal(const unitree_go__msg__HeightMap * lhs, const unitree_go__msg__HeightMap * rhs); + +/// Copy a msg/HeightMap message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__HeightMap__copy( + const unitree_go__msg__HeightMap * input, + unitree_go__msg__HeightMap * output); + +/// Initialize array of msg/HeightMap messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__HeightMap__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__HeightMap__Sequence__init(unitree_go__msg__HeightMap__Sequence * array, size_t size); + +/// Finalize array of msg/HeightMap messages. +/** + * It calls + * unitree_go__msg__HeightMap__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__HeightMap__Sequence__fini(unitree_go__msg__HeightMap__Sequence * array); + +/// Create array of msg/HeightMap messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__HeightMap__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__HeightMap__Sequence * +unitree_go__msg__HeightMap__Sequence__create(size_t size); + +/// Destroy array of msg/HeightMap messages. +/** + * It calls + * unitree_go__msg__HeightMap__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__HeightMap__Sequence__destroy(unitree_go__msg__HeightMap__Sequence * array); + +/// Check for msg/HeightMap message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__HeightMap__Sequence__are_equal(const unitree_go__msg__HeightMap__Sequence * lhs, const unitree_go__msg__HeightMap__Sequence * rhs); + +/// Copy an array of msg/HeightMap messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__HeightMap__Sequence__copy( + const unitree_go__msg__HeightMap__Sequence * input, + unitree_go__msg__HeightMap__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..09b0a40 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__HeightMap( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__HeightMap( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, HeightMap)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..2bd56a2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/height_map__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::HeightMap & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::HeightMap & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::HeightMap & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_HeightMap( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, HeightMap)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..989f851 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, HeightMap)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..691189f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, HeightMap)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.h new file mode 100644 index 0000000..965a83b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.h @@ -0,0 +1,52 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'frame_id' +#include "rosidl_runtime_c/string.h" +// Member 'data' +#include "rosidl_runtime_c/primitives_sequence.h" + +// Struct defined in msg/HeightMap in the package unitree_go. +typedef struct unitree_go__msg__HeightMap +{ + double stamp; + rosidl_runtime_c__String frame_id; + float resolution; + uint32_t width; + uint32_t height; + float origin[2]; + rosidl_runtime_c__float__Sequence data; +} unitree_go__msg__HeightMap; + +// Struct for a sequence of unitree_go__msg__HeightMap. +typedef struct unitree_go__msg__HeightMap__Sequence +{ + unitree_go__msg__HeightMap * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__HeightMap__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.hpp new file mode 100644 index 0000000..4775967 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__struct.hpp @@ -0,0 +1,213 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__HeightMap __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__HeightMap __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct HeightMap_ +{ + using Type = HeightMap_; + + explicit HeightMap_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->stamp = 0.0; + this->frame_id = ""; + this->resolution = 0.0f; + this->width = 0ul; + this->height = 0ul; + std::fill::iterator, float>(this->origin.begin(), this->origin.end(), 0.0f); + } + } + + explicit HeightMap_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : frame_id(_alloc), + origin(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->stamp = 0.0; + this->frame_id = ""; + this->resolution = 0.0f; + this->width = 0ul; + this->height = 0ul; + std::fill::iterator, float>(this->origin.begin(), this->origin.end(), 0.0f); + } + } + + // field types and members + using _stamp_type = + double; + _stamp_type stamp; + using _frame_id_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _frame_id_type frame_id; + using _resolution_type = + float; + _resolution_type resolution; + using _width_type = + uint32_t; + _width_type width; + using _height_type = + uint32_t; + _height_type height; + using _origin_type = + std::array; + _origin_type origin; + using _data_type = + std::vector::other>; + _data_type data; + + // setters for named parameter idiom + Type & set__stamp( + const double & _arg) + { + this->stamp = _arg; + return *this; + } + Type & set__frame_id( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->frame_id = _arg; + return *this; + } + Type & set__resolution( + const float & _arg) + { + this->resolution = _arg; + return *this; + } + Type & set__width( + const uint32_t & _arg) + { + this->width = _arg; + return *this; + } + Type & set__height( + const uint32_t & _arg) + { + this->height = _arg; + return *this; + } + Type & set__origin( + const std::array & _arg) + { + this->origin = _arg; + return *this; + } + Type & set__data( + const std::vector::other> & _arg) + { + this->data = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::HeightMap_ *; + using ConstRawPtr = + const unitree_go::msg::HeightMap_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__HeightMap + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__HeightMap + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const HeightMap_ & other) const + { + if (this->stamp != other.stamp) { + return false; + } + if (this->frame_id != other.frame_id) { + return false; + } + if (this->resolution != other.resolution) { + return false; + } + if (this->width != other.width) { + return false; + } + if (this->height != other.height) { + return false; + } + if (this->origin != other.origin) { + return false; + } + if (this->data != other.data) { + return false; + } + return true; + } + bool operator!=(const HeightMap_ & other) const + { + return !this->operator==(other); + } +}; // struct HeightMap_ + +// alias to use template instance with default allocator +using HeightMap = + unitree_go::msg::HeightMap_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__traits.hpp new file mode 100644 index 0000000..336ecbc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TRAITS_HPP_ + +#include "unitree_go/msg/detail/height_map__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::HeightMap"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/HeightMap"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.c new file mode 100644 index 0000000..c25acf8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.c @@ -0,0 +1,177 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/height_map__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/height_map__functions.h" +#include "unitree_go/msg/detail/height_map__struct.h" + + +// Include directives for member types +// Member `frame_id` +#include "rosidl_runtime_c/string_functions.h" +// Member `data` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void HeightMap__rosidl_typesupport_introspection_c__HeightMap_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__HeightMap__init(message_memory); +} + +void HeightMap__rosidl_typesupport_introspection_c__HeightMap_fini_function(void * message_memory) +{ + unitree_go__msg__HeightMap__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_member_array[7] = { + { + "stamp", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, stamp), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "frame_id", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, frame_id), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "resolution", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, resolution), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "width", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, width), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "height", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, height), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "origin", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, origin), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "data", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__HeightMap, data), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_members = { + "unitree_go__msg", // message namespace + "HeightMap", // message name + 7, // number of fields + sizeof(unitree_go__msg__HeightMap), + HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_member_array, // message members + HeightMap__rosidl_typesupport_introspection_c__HeightMap_init_function, // function to initialize message memory (memory has to be allocated) + HeightMap__rosidl_typesupport_introspection_c__HeightMap_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_type_support_handle = { + 0, + &HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, HeightMap)() { + if (!HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_type_support_handle.typesupport_identifier) { + HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &HeightMap__rosidl_typesupport_introspection_c__HeightMap_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.cpp new file mode 100644 index 0000000..8f3c2c0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.cpp @@ -0,0 +1,244 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/height_map__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void HeightMap_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::HeightMap(_init); +} + +void HeightMap_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~HeightMap(); +} + +size_t size_function__HeightMap__origin(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__HeightMap__origin(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__HeightMap__origin(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__HeightMap__data(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__HeightMap__data(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__HeightMap__data(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__HeightMap__data(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember HeightMap_message_member_array[7] = { + { + "stamp", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, stamp), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "frame_id", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, frame_id), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "resolution", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, resolution), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "width", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, width), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "height", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, height), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "origin", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, origin), // bytes offset in struct + nullptr, // default value + size_function__HeightMap__origin, // size() function pointer + get_const_function__HeightMap__origin, // get_const(index) function pointer + get_function__HeightMap__origin, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "data", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::HeightMap, data), // bytes offset in struct + nullptr, // default value + size_function__HeightMap__data, // size() function pointer + get_const_function__HeightMap__data, // get_const(index) function pointer + get_function__HeightMap__data, // get(index) function pointer + resize_function__HeightMap__data // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers HeightMap_message_members = { + "unitree_go::msg", // message namespace + "HeightMap", // message name + 7, // number of fields + sizeof(unitree_go::msg::HeightMap), + HeightMap_message_member_array, // message members + HeightMap_init_function, // function to initialize message memory (memory has to be allocated) + HeightMap_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t HeightMap_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &HeightMap_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::HeightMap_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, HeightMap)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::HeightMap_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.h new file mode 100644 index 0000000..16e5fbb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + HeightMap +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.hpp new file mode 100644 index 0000000..fc2f4e5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/height_map__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + HeightMap +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__HEIGHT_MAP__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__builder.hpp new file mode 100644 index 0000000..06ae144 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__builder.hpp @@ -0,0 +1,119 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/imu_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_IMUState_temperature +{ +public: + explicit Init_IMUState_temperature(::unitree_go::msg::IMUState & msg) + : msg_(msg) + {} + ::unitree_go::msg::IMUState temperature(::unitree_go::msg::IMUState::_temperature_type arg) + { + msg_.temperature = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::IMUState msg_; +}; + +class Init_IMUState_rpy +{ +public: + explicit Init_IMUState_rpy(::unitree_go::msg::IMUState & msg) + : msg_(msg) + {} + Init_IMUState_temperature rpy(::unitree_go::msg::IMUState::_rpy_type arg) + { + msg_.rpy = std::move(arg); + return Init_IMUState_temperature(msg_); + } + +private: + ::unitree_go::msg::IMUState msg_; +}; + +class Init_IMUState_accelerometer +{ +public: + explicit Init_IMUState_accelerometer(::unitree_go::msg::IMUState & msg) + : msg_(msg) + {} + Init_IMUState_rpy accelerometer(::unitree_go::msg::IMUState::_accelerometer_type arg) + { + msg_.accelerometer = std::move(arg); + return Init_IMUState_rpy(msg_); + } + +private: + ::unitree_go::msg::IMUState msg_; +}; + +class Init_IMUState_gyroscope +{ +public: + explicit Init_IMUState_gyroscope(::unitree_go::msg::IMUState & msg) + : msg_(msg) + {} + Init_IMUState_accelerometer gyroscope(::unitree_go::msg::IMUState::_gyroscope_type arg) + { + msg_.gyroscope = std::move(arg); + return Init_IMUState_accelerometer(msg_); + } + +private: + ::unitree_go::msg::IMUState msg_; +}; + +class Init_IMUState_quaternion +{ +public: + Init_IMUState_quaternion() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_IMUState_gyroscope quaternion(::unitree_go::msg::IMUState::_quaternion_type arg) + { + msg_.quaternion = std::move(arg); + return Init_IMUState_gyroscope(msg_); + } + +private: + ::unitree_go::msg::IMUState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::IMUState>() +{ + return unitree_go::msg::builder::Init_IMUState_quaternion(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.c new file mode 100644 index 0000000..a19540a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.c @@ -0,0 +1,279 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/imu_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__IMUState__init(unitree_go__msg__IMUState * msg) +{ + if (!msg) { + return false; + } + // quaternion + // gyroscope + // accelerometer + // rpy + // temperature + return true; +} + +void +unitree_go__msg__IMUState__fini(unitree_go__msg__IMUState * msg) +{ + if (!msg) { + return; + } + // quaternion + // gyroscope + // accelerometer + // rpy + // temperature +} + +bool +unitree_go__msg__IMUState__are_equal(const unitree_go__msg__IMUState * lhs, const unitree_go__msg__IMUState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // quaternion + for (size_t i = 0; i < 4; ++i) { + if (lhs->quaternion[i] != rhs->quaternion[i]) { + return false; + } + } + // gyroscope + for (size_t i = 0; i < 3; ++i) { + if (lhs->gyroscope[i] != rhs->gyroscope[i]) { + return false; + } + } + // accelerometer + for (size_t i = 0; i < 3; ++i) { + if (lhs->accelerometer[i] != rhs->accelerometer[i]) { + return false; + } + } + // rpy + for (size_t i = 0; i < 3; ++i) { + if (lhs->rpy[i] != rhs->rpy[i]) { + return false; + } + } + // temperature + if (lhs->temperature != rhs->temperature) { + return false; + } + return true; +} + +bool +unitree_go__msg__IMUState__copy( + const unitree_go__msg__IMUState * input, + unitree_go__msg__IMUState * output) +{ + if (!input || !output) { + return false; + } + // quaternion + for (size_t i = 0; i < 4; ++i) { + output->quaternion[i] = input->quaternion[i]; + } + // gyroscope + for (size_t i = 0; i < 3; ++i) { + output->gyroscope[i] = input->gyroscope[i]; + } + // accelerometer + for (size_t i = 0; i < 3; ++i) { + output->accelerometer[i] = input->accelerometer[i]; + } + // rpy + for (size_t i = 0; i < 3; ++i) { + output->rpy[i] = input->rpy[i]; + } + // temperature + output->temperature = input->temperature; + return true; +} + +unitree_go__msg__IMUState * +unitree_go__msg__IMUState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__IMUState * msg = (unitree_go__msg__IMUState *)allocator.allocate(sizeof(unitree_go__msg__IMUState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__IMUState)); + bool success = unitree_go__msg__IMUState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__IMUState__destroy(unitree_go__msg__IMUState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__IMUState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__IMUState__Sequence__init(unitree_go__msg__IMUState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__IMUState * data = NULL; + + if (size) { + data = (unitree_go__msg__IMUState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__IMUState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__IMUState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__IMUState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__IMUState__Sequence__fini(unitree_go__msg__IMUState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__IMUState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__IMUState__Sequence * +unitree_go__msg__IMUState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__IMUState__Sequence * array = (unitree_go__msg__IMUState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__IMUState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__IMUState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__IMUState__Sequence__destroy(unitree_go__msg__IMUState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__IMUState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__IMUState__Sequence__are_equal(const unitree_go__msg__IMUState__Sequence * lhs, const unitree_go__msg__IMUState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__IMUState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__IMUState__Sequence__copy( + const unitree_go__msg__IMUState__Sequence * input, + unitree_go__msg__IMUState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__IMUState); + unitree_go__msg__IMUState * data = + (unitree_go__msg__IMUState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__IMUState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__IMUState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__IMUState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.h new file mode 100644 index 0000000..c9d4485 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/imu_state__struct.h" + +/// Initialize msg/IMUState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__IMUState + * )) before or use + * unitree_go__msg__IMUState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__IMUState__init(unitree_go__msg__IMUState * msg); + +/// Finalize msg/IMUState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__IMUState__fini(unitree_go__msg__IMUState * msg); + +/// Create msg/IMUState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__IMUState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__IMUState * +unitree_go__msg__IMUState__create(); + +/// Destroy msg/IMUState message. +/** + * It calls + * unitree_go__msg__IMUState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__IMUState__destroy(unitree_go__msg__IMUState * msg); + +/// Check for msg/IMUState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__IMUState__are_equal(const unitree_go__msg__IMUState * lhs, const unitree_go__msg__IMUState * rhs); + +/// Copy a msg/IMUState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__IMUState__copy( + const unitree_go__msg__IMUState * input, + unitree_go__msg__IMUState * output); + +/// Initialize array of msg/IMUState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__IMUState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__IMUState__Sequence__init(unitree_go__msg__IMUState__Sequence * array, size_t size); + +/// Finalize array of msg/IMUState messages. +/** + * It calls + * unitree_go__msg__IMUState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__IMUState__Sequence__fini(unitree_go__msg__IMUState__Sequence * array); + +/// Create array of msg/IMUState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__IMUState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__IMUState__Sequence * +unitree_go__msg__IMUState__Sequence__create(size_t size); + +/// Destroy array of msg/IMUState messages. +/** + * It calls + * unitree_go__msg__IMUState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__IMUState__Sequence__destroy(unitree_go__msg__IMUState__Sequence * array); + +/// Check for msg/IMUState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__IMUState__Sequence__are_equal(const unitree_go__msg__IMUState__Sequence * lhs, const unitree_go__msg__IMUState__Sequence * rhs); + +/// Copy an array of msg/IMUState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__IMUState__Sequence__copy( + const unitree_go__msg__IMUState__Sequence * input, + unitree_go__msg__IMUState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..90eface --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__IMUState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__IMUState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, IMUState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..eeb2a9b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/imu_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::IMUState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::IMUState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::IMUState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_IMUState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, IMUState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..0fcafb6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, IMUState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..c956adc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, IMUState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.h new file mode 100644 index 0000000..ad1d2c0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.h @@ -0,0 +1,44 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/IMUState in the package unitree_go. +typedef struct unitree_go__msg__IMUState +{ + float quaternion[4]; + float gyroscope[3]; + float accelerometer[3]; + float rpy[3]; + int8_t temperature; +} unitree_go__msg__IMUState; + +// Struct for a sequence of unitree_go__msg__IMUState. +typedef struct unitree_go__msg__IMUState__Sequence +{ + unitree_go__msg__IMUState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__IMUState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.hpp new file mode 100644 index 0000000..2f71461 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__struct.hpp @@ -0,0 +1,189 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__IMUState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__IMUState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct IMUState_ +{ + using Type = IMUState_; + + explicit IMUState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, float>(this->quaternion.begin(), this->quaternion.end(), 0.0f); + std::fill::iterator, float>(this->gyroscope.begin(), this->gyroscope.end(), 0.0f); + std::fill::iterator, float>(this->accelerometer.begin(), this->accelerometer.end(), 0.0f); + std::fill::iterator, float>(this->rpy.begin(), this->rpy.end(), 0.0f); + this->temperature = 0; + } + } + + explicit IMUState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : quaternion(_alloc), + gyroscope(_alloc), + accelerometer(_alloc), + rpy(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, float>(this->quaternion.begin(), this->quaternion.end(), 0.0f); + std::fill::iterator, float>(this->gyroscope.begin(), this->gyroscope.end(), 0.0f); + std::fill::iterator, float>(this->accelerometer.begin(), this->accelerometer.end(), 0.0f); + std::fill::iterator, float>(this->rpy.begin(), this->rpy.end(), 0.0f); + this->temperature = 0; + } + } + + // field types and members + using _quaternion_type = + std::array; + _quaternion_type quaternion; + using _gyroscope_type = + std::array; + _gyroscope_type gyroscope; + using _accelerometer_type = + std::array; + _accelerometer_type accelerometer; + using _rpy_type = + std::array; + _rpy_type rpy; + using _temperature_type = + int8_t; + _temperature_type temperature; + + // setters for named parameter idiom + Type & set__quaternion( + const std::array & _arg) + { + this->quaternion = _arg; + return *this; + } + Type & set__gyroscope( + const std::array & _arg) + { + this->gyroscope = _arg; + return *this; + } + Type & set__accelerometer( + const std::array & _arg) + { + this->accelerometer = _arg; + return *this; + } + Type & set__rpy( + const std::array & _arg) + { + this->rpy = _arg; + return *this; + } + Type & set__temperature( + const int8_t & _arg) + { + this->temperature = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::IMUState_ *; + using ConstRawPtr = + const unitree_go::msg::IMUState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__IMUState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__IMUState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const IMUState_ & other) const + { + if (this->quaternion != other.quaternion) { + return false; + } + if (this->gyroscope != other.gyroscope) { + return false; + } + if (this->accelerometer != other.accelerometer) { + return false; + } + if (this->rpy != other.rpy) { + return false; + } + if (this->temperature != other.temperature) { + return false; + } + return true; + } + bool operator!=(const IMUState_ & other) const + { + return !this->operator==(other); + } +}; // struct IMUState_ + +// alias to use template instance with default allocator +using IMUState = + unitree_go::msg::IMUState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__traits.hpp new file mode 100644 index 0000000..bc49936 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/imu_state__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::IMUState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/IMUState"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.c new file mode 100644 index 0000000..c9006db --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.c @@ -0,0 +1,141 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/imu_state__functions.h" +#include "unitree_go/msg/detail/imu_state__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void IMUState__rosidl_typesupport_introspection_c__IMUState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__IMUState__init(message_memory); +} + +void IMUState__rosidl_typesupport_introspection_c__IMUState_fini_function(void * message_memory) +{ + unitree_go__msg__IMUState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember IMUState__rosidl_typesupport_introspection_c__IMUState_message_member_array[5] = { + { + "quaternion", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go__msg__IMUState, quaternion), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gyroscope", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__IMUState, gyroscope), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "accelerometer", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__IMUState, accelerometer), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "rpy", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__IMUState, rpy), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "temperature", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__IMUState, temperature), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers IMUState__rosidl_typesupport_introspection_c__IMUState_message_members = { + "unitree_go__msg", // message namespace + "IMUState", // message name + 5, // number of fields + sizeof(unitree_go__msg__IMUState), + IMUState__rosidl_typesupport_introspection_c__IMUState_message_member_array, // message members + IMUState__rosidl_typesupport_introspection_c__IMUState_init_function, // function to initialize message memory (memory has to be allocated) + IMUState__rosidl_typesupport_introspection_c__IMUState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t IMUState__rosidl_typesupport_introspection_c__IMUState_message_type_support_handle = { + 0, + &IMUState__rosidl_typesupport_introspection_c__IMUState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, IMUState)() { + if (!IMUState__rosidl_typesupport_introspection_c__IMUState_message_type_support_handle.typesupport_identifier) { + IMUState__rosidl_typesupport_introspection_c__IMUState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &IMUState__rosidl_typesupport_introspection_c__IMUState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.cpp new file mode 100644 index 0000000..19067c1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.cpp @@ -0,0 +1,247 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/imu_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void IMUState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::IMUState(_init); +} + +void IMUState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~IMUState(); +} + +size_t size_function__IMUState__quaternion(const void * untyped_member) +{ + (void)untyped_member; + return 4; +} + +const void * get_const_function__IMUState__quaternion(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__IMUState__quaternion(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__IMUState__gyroscope(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__IMUState__gyroscope(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__IMUState__gyroscope(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__IMUState__accelerometer(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__IMUState__accelerometer(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__IMUState__accelerometer(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__IMUState__rpy(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__IMUState__rpy(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__IMUState__rpy(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember IMUState_message_member_array[5] = { + { + "quaternion", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go::msg::IMUState, quaternion), // bytes offset in struct + nullptr, // default value + size_function__IMUState__quaternion, // size() function pointer + get_const_function__IMUState__quaternion, // get_const(index) function pointer + get_function__IMUState__quaternion, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gyroscope", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::IMUState, gyroscope), // bytes offset in struct + nullptr, // default value + size_function__IMUState__gyroscope, // size() function pointer + get_const_function__IMUState__gyroscope, // get_const(index) function pointer + get_function__IMUState__gyroscope, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "accelerometer", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::IMUState, accelerometer), // bytes offset in struct + nullptr, // default value + size_function__IMUState__accelerometer, // size() function pointer + get_const_function__IMUState__accelerometer, // get_const(index) function pointer + get_function__IMUState__accelerometer, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "rpy", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::IMUState, rpy), // bytes offset in struct + nullptr, // default value + size_function__IMUState__rpy, // size() function pointer + get_const_function__IMUState__rpy, // get_const(index) function pointer + get_function__IMUState__rpy, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "temperature", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::IMUState, temperature), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers IMUState_message_members = { + "unitree_go::msg", // message namespace + "IMUState", // message name + 5, // number of fields + sizeof(unitree_go::msg::IMUState), + IMUState_message_member_array, // message members + IMUState_init_function, // function to initialize message memory (memory has to be allocated) + IMUState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t IMUState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &IMUState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::IMUState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, IMUState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::IMUState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.h new file mode 100644 index 0000000..43fca1b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + IMUState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.hpp new file mode 100644 index 0000000..4914aa9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/imu_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__IMU_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__IMU_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + IMUState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__IMU_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__builder.hpp new file mode 100644 index 0000000..8da7e4e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__builder.hpp @@ -0,0 +1,87 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__BUILDER_HPP_ + +#include "unitree_go/msg/detail/interface_config__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_InterfaceConfig_reserve +{ +public: + explicit Init_InterfaceConfig_reserve(::unitree_go::msg::InterfaceConfig & msg) + : msg_(msg) + {} + ::unitree_go::msg::InterfaceConfig reserve(::unitree_go::msg::InterfaceConfig::_reserve_type arg) + { + msg_.reserve = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::InterfaceConfig msg_; +}; + +class Init_InterfaceConfig_value +{ +public: + explicit Init_InterfaceConfig_value(::unitree_go::msg::InterfaceConfig & msg) + : msg_(msg) + {} + Init_InterfaceConfig_reserve value(::unitree_go::msg::InterfaceConfig::_value_type arg) + { + msg_.value = std::move(arg); + return Init_InterfaceConfig_reserve(msg_); + } + +private: + ::unitree_go::msg::InterfaceConfig msg_; +}; + +class Init_InterfaceConfig_mode +{ +public: + Init_InterfaceConfig_mode() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_InterfaceConfig_value mode(::unitree_go::msg::InterfaceConfig::_mode_type arg) + { + msg_.mode = std::move(arg); + return Init_InterfaceConfig_value(msg_); + } + +private: + ::unitree_go::msg::InterfaceConfig msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::InterfaceConfig>() +{ + return unitree_go::msg::builder::Init_InterfaceConfig_mode(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.c new file mode 100644 index 0000000..0a9503f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.c @@ -0,0 +1,251 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/interface_config__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__InterfaceConfig__init(unitree_go__msg__InterfaceConfig * msg) +{ + if (!msg) { + return false; + } + // mode + // value + // reserve + return true; +} + +void +unitree_go__msg__InterfaceConfig__fini(unitree_go__msg__InterfaceConfig * msg) +{ + if (!msg) { + return; + } + // mode + // value + // reserve +} + +bool +unitree_go__msg__InterfaceConfig__are_equal(const unitree_go__msg__InterfaceConfig * lhs, const unitree_go__msg__InterfaceConfig * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // mode + if (lhs->mode != rhs->mode) { + return false; + } + // value + if (lhs->value != rhs->value) { + return false; + } + // reserve + for (size_t i = 0; i < 2; ++i) { + if (lhs->reserve[i] != rhs->reserve[i]) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__InterfaceConfig__copy( + const unitree_go__msg__InterfaceConfig * input, + unitree_go__msg__InterfaceConfig * output) +{ + if (!input || !output) { + return false; + } + // mode + output->mode = input->mode; + // value + output->value = input->value; + // reserve + for (size_t i = 0; i < 2; ++i) { + output->reserve[i] = input->reserve[i]; + } + return true; +} + +unitree_go__msg__InterfaceConfig * +unitree_go__msg__InterfaceConfig__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__InterfaceConfig * msg = (unitree_go__msg__InterfaceConfig *)allocator.allocate(sizeof(unitree_go__msg__InterfaceConfig), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__InterfaceConfig)); + bool success = unitree_go__msg__InterfaceConfig__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__InterfaceConfig__destroy(unitree_go__msg__InterfaceConfig * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__InterfaceConfig__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__InterfaceConfig__Sequence__init(unitree_go__msg__InterfaceConfig__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__InterfaceConfig * data = NULL; + + if (size) { + data = (unitree_go__msg__InterfaceConfig *)allocator.zero_allocate(size, sizeof(unitree_go__msg__InterfaceConfig), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__InterfaceConfig__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__InterfaceConfig__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__InterfaceConfig__Sequence__fini(unitree_go__msg__InterfaceConfig__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__InterfaceConfig__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__InterfaceConfig__Sequence * +unitree_go__msg__InterfaceConfig__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__InterfaceConfig__Sequence * array = (unitree_go__msg__InterfaceConfig__Sequence *)allocator.allocate(sizeof(unitree_go__msg__InterfaceConfig__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__InterfaceConfig__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__InterfaceConfig__Sequence__destroy(unitree_go__msg__InterfaceConfig__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__InterfaceConfig__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__InterfaceConfig__Sequence__are_equal(const unitree_go__msg__InterfaceConfig__Sequence * lhs, const unitree_go__msg__InterfaceConfig__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__InterfaceConfig__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__InterfaceConfig__Sequence__copy( + const unitree_go__msg__InterfaceConfig__Sequence * input, + unitree_go__msg__InterfaceConfig__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__InterfaceConfig); + unitree_go__msg__InterfaceConfig * data = + (unitree_go__msg__InterfaceConfig *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__InterfaceConfig__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__InterfaceConfig__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__InterfaceConfig__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.h new file mode 100644 index 0000000..de103af --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/interface_config__struct.h" + +/// Initialize msg/InterfaceConfig message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__InterfaceConfig + * )) before or use + * unitree_go__msg__InterfaceConfig__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__InterfaceConfig__init(unitree_go__msg__InterfaceConfig * msg); + +/// Finalize msg/InterfaceConfig message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__InterfaceConfig__fini(unitree_go__msg__InterfaceConfig * msg); + +/// Create msg/InterfaceConfig message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__InterfaceConfig__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__InterfaceConfig * +unitree_go__msg__InterfaceConfig__create(); + +/// Destroy msg/InterfaceConfig message. +/** + * It calls + * unitree_go__msg__InterfaceConfig__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__InterfaceConfig__destroy(unitree_go__msg__InterfaceConfig * msg); + +/// Check for msg/InterfaceConfig message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__InterfaceConfig__are_equal(const unitree_go__msg__InterfaceConfig * lhs, const unitree_go__msg__InterfaceConfig * rhs); + +/// Copy a msg/InterfaceConfig message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__InterfaceConfig__copy( + const unitree_go__msg__InterfaceConfig * input, + unitree_go__msg__InterfaceConfig * output); + +/// Initialize array of msg/InterfaceConfig messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__InterfaceConfig__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__InterfaceConfig__Sequence__init(unitree_go__msg__InterfaceConfig__Sequence * array, size_t size); + +/// Finalize array of msg/InterfaceConfig messages. +/** + * It calls + * unitree_go__msg__InterfaceConfig__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__InterfaceConfig__Sequence__fini(unitree_go__msg__InterfaceConfig__Sequence * array); + +/// Create array of msg/InterfaceConfig messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__InterfaceConfig__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__InterfaceConfig__Sequence * +unitree_go__msg__InterfaceConfig__Sequence__create(size_t size); + +/// Destroy array of msg/InterfaceConfig messages. +/** + * It calls + * unitree_go__msg__InterfaceConfig__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__InterfaceConfig__Sequence__destroy(unitree_go__msg__InterfaceConfig__Sequence * array); + +/// Check for msg/InterfaceConfig message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__InterfaceConfig__Sequence__are_equal(const unitree_go__msg__InterfaceConfig__Sequence * lhs, const unitree_go__msg__InterfaceConfig__Sequence * rhs); + +/// Copy an array of msg/InterfaceConfig messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__InterfaceConfig__Sequence__copy( + const unitree_go__msg__InterfaceConfig__Sequence * input, + unitree_go__msg__InterfaceConfig__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..0c54fcc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__InterfaceConfig( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__InterfaceConfig( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, InterfaceConfig)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..561b9ad --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/interface_config__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::InterfaceConfig & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::InterfaceConfig & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::InterfaceConfig & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_InterfaceConfig( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, InterfaceConfig)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..42ddd98 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, InterfaceConfig)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..3db771c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, InterfaceConfig)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.h new file mode 100644 index 0000000..44d940a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.h @@ -0,0 +1,42 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/InterfaceConfig in the package unitree_go. +typedef struct unitree_go__msg__InterfaceConfig +{ + uint8_t mode; + uint8_t value; + uint8_t reserve[2]; +} unitree_go__msg__InterfaceConfig; + +// Struct for a sequence of unitree_go__msg__InterfaceConfig. +typedef struct unitree_go__msg__InterfaceConfig__Sequence +{ + unitree_go__msg__InterfaceConfig * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__InterfaceConfig__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.hpp new file mode 100644 index 0000000..835c98e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__struct.hpp @@ -0,0 +1,158 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__InterfaceConfig __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__InterfaceConfig __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct InterfaceConfig_ +{ + using Type = InterfaceConfig_; + + explicit InterfaceConfig_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->value = 0; + std::fill::iterator, uint8_t>(this->reserve.begin(), this->reserve.end(), 0); + } + } + + explicit InterfaceConfig_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : reserve(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->value = 0; + std::fill::iterator, uint8_t>(this->reserve.begin(), this->reserve.end(), 0); + } + } + + // field types and members + using _mode_type = + uint8_t; + _mode_type mode; + using _value_type = + uint8_t; + _value_type value; + using _reserve_type = + std::array; + _reserve_type reserve; + + // setters for named parameter idiom + Type & set__mode( + const uint8_t & _arg) + { + this->mode = _arg; + return *this; + } + Type & set__value( + const uint8_t & _arg) + { + this->value = _arg; + return *this; + } + Type & set__reserve( + const std::array & _arg) + { + this->reserve = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::InterfaceConfig_ *; + using ConstRawPtr = + const unitree_go::msg::InterfaceConfig_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__InterfaceConfig + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__InterfaceConfig + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const InterfaceConfig_ & other) const + { + if (this->mode != other.mode) { + return false; + } + if (this->value != other.value) { + return false; + } + if (this->reserve != other.reserve) { + return false; + } + return true; + } + bool operator!=(const InterfaceConfig_ & other) const + { + return !this->operator==(other); + } +}; // struct InterfaceConfig_ + +// alias to use template instance with default allocator +using InterfaceConfig = + unitree_go::msg::InterfaceConfig_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__traits.hpp new file mode 100644 index 0000000..47932e3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TRAITS_HPP_ + +#include "unitree_go/msg/detail/interface_config__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::InterfaceConfig"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/InterfaceConfig"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.c new file mode 100644 index 0000000..b6998ee --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.c @@ -0,0 +1,111 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/interface_config__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/interface_config__functions.h" +#include "unitree_go/msg/detail/interface_config__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__InterfaceConfig__init(message_memory); +} + +void InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_fini_function(void * message_memory) +{ + unitree_go__msg__InterfaceConfig__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_member_array[3] = { + { + "mode", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__InterfaceConfig, mode), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "value", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__InterfaceConfig, value), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__InterfaceConfig, reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_members = { + "unitree_go__msg", // message namespace + "InterfaceConfig", // message name + 3, // number of fields + sizeof(unitree_go__msg__InterfaceConfig), + InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_member_array, // message members + InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_init_function, // function to initialize message memory (memory has to be allocated) + InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_type_support_handle = { + 0, + &InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, InterfaceConfig)() { + if (!InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_type_support_handle.typesupport_identifier) { + InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &InterfaceConfig__rosidl_typesupport_introspection_c__InterfaceConfig_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.cpp new file mode 100644 index 0000000..123f226 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.cpp @@ -0,0 +1,157 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/interface_config__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void InterfaceConfig_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::InterfaceConfig(_init); +} + +void InterfaceConfig_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~InterfaceConfig(); +} + +size_t size_function__InterfaceConfig__reserve(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__InterfaceConfig__reserve(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__InterfaceConfig__reserve(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember InterfaceConfig_message_member_array[3] = { + { + "mode", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::InterfaceConfig, mode), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "value", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::InterfaceConfig, value), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::InterfaceConfig, reserve), // bytes offset in struct + nullptr, // default value + size_function__InterfaceConfig__reserve, // size() function pointer + get_const_function__InterfaceConfig__reserve, // get_const(index) function pointer + get_function__InterfaceConfig__reserve, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers InterfaceConfig_message_members = { + "unitree_go::msg", // message namespace + "InterfaceConfig", // message name + 3, // number of fields + sizeof(unitree_go::msg::InterfaceConfig), + InterfaceConfig_message_member_array, // message members + InterfaceConfig_init_function, // function to initialize message memory (memory has to be allocated) + InterfaceConfig_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t InterfaceConfig_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &InterfaceConfig_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::InterfaceConfig_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, InterfaceConfig)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::InterfaceConfig_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.h new file mode 100644 index 0000000..e0e628f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + InterfaceConfig +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.hpp new file mode 100644 index 0000000..5e96d7c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/interface_config__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + InterfaceConfig +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__INTERFACE_CONFIG__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__builder.hpp new file mode 100644 index 0000000..b6689b9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__builder.hpp @@ -0,0 +1,311 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/lidar_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_LidarState_serial_buffer_read +{ +public: + explicit Init_LidarState_serial_buffer_read(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + ::unitree_go::msg::LidarState serial_buffer_read(::unitree_go::msg::LidarState::_serial_buffer_read_type arg) + { + msg_.serial_buffer_read = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_serial_buffer_size +{ +public: + explicit Init_LidarState_serial_buffer_size(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_serial_buffer_read serial_buffer_size(::unitree_go::msg::LidarState::_serial_buffer_size_type arg) + { + msg_.serial_buffer_size = std::move(arg); + return Init_LidarState_serial_buffer_read(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_serial_recv_stamp +{ +public: + explicit Init_LidarState_serial_recv_stamp(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_serial_buffer_size serial_recv_stamp(::unitree_go::msg::LidarState::_serial_recv_stamp_type arg) + { + msg_.serial_recv_stamp = std::move(arg); + return Init_LidarState_serial_buffer_size(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_imu_rpy +{ +public: + explicit Init_LidarState_imu_rpy(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_serial_recv_stamp imu_rpy(::unitree_go::msg::LidarState::_imu_rpy_type arg) + { + msg_.imu_rpy = std::move(arg); + return Init_LidarState_serial_recv_stamp(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_imu_packet_loss_rate +{ +public: + explicit Init_LidarState_imu_packet_loss_rate(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_imu_rpy imu_packet_loss_rate(::unitree_go::msg::LidarState::_imu_packet_loss_rate_type arg) + { + msg_.imu_packet_loss_rate = std::move(arg); + return Init_LidarState_imu_rpy(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_imu_frequency +{ +public: + explicit Init_LidarState_imu_frequency(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_imu_packet_loss_rate imu_frequency(::unitree_go::msg::LidarState::_imu_frequency_type arg) + { + msg_.imu_frequency = std::move(arg); + return Init_LidarState_imu_packet_loss_rate(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_cloud_scan_num +{ +public: + explicit Init_LidarState_cloud_scan_num(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_imu_frequency cloud_scan_num(::unitree_go::msg::LidarState::_cloud_scan_num_type arg) + { + msg_.cloud_scan_num = std::move(arg); + return Init_LidarState_imu_frequency(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_cloud_size +{ +public: + explicit Init_LidarState_cloud_size(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_cloud_scan_num cloud_size(::unitree_go::msg::LidarState::_cloud_size_type arg) + { + msg_.cloud_size = std::move(arg); + return Init_LidarState_cloud_scan_num(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_cloud_packet_loss_rate +{ +public: + explicit Init_LidarState_cloud_packet_loss_rate(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_cloud_size cloud_packet_loss_rate(::unitree_go::msg::LidarState::_cloud_packet_loss_rate_type arg) + { + msg_.cloud_packet_loss_rate = std::move(arg); + return Init_LidarState_cloud_size(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_cloud_frequency +{ +public: + explicit Init_LidarState_cloud_frequency(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_cloud_packet_loss_rate cloud_frequency(::unitree_go::msg::LidarState::_cloud_frequency_type arg) + { + msg_.cloud_frequency = std::move(arg); + return Init_LidarState_cloud_packet_loss_rate(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_error_state +{ +public: + explicit Init_LidarState_error_state(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_cloud_frequency error_state(::unitree_go::msg::LidarState::_error_state_type arg) + { + msg_.error_state = std::move(arg); + return Init_LidarState_cloud_frequency(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_com_rotation_speed +{ +public: + explicit Init_LidarState_com_rotation_speed(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_error_state com_rotation_speed(::unitree_go::msg::LidarState::_com_rotation_speed_type arg) + { + msg_.com_rotation_speed = std::move(arg); + return Init_LidarState_error_state(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_sys_rotation_speed +{ +public: + explicit Init_LidarState_sys_rotation_speed(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_com_rotation_speed sys_rotation_speed(::unitree_go::msg::LidarState::_sys_rotation_speed_type arg) + { + msg_.sys_rotation_speed = std::move(arg); + return Init_LidarState_com_rotation_speed(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_sdk_version +{ +public: + explicit Init_LidarState_sdk_version(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_sys_rotation_speed sdk_version(::unitree_go::msg::LidarState::_sdk_version_type arg) + { + msg_.sdk_version = std::move(arg); + return Init_LidarState_sys_rotation_speed(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_software_version +{ +public: + explicit Init_LidarState_software_version(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_sdk_version software_version(::unitree_go::msg::LidarState::_software_version_type arg) + { + msg_.software_version = std::move(arg); + return Init_LidarState_sdk_version(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_firmware_version +{ +public: + explicit Init_LidarState_firmware_version(::unitree_go::msg::LidarState & msg) + : msg_(msg) + {} + Init_LidarState_software_version firmware_version(::unitree_go::msg::LidarState::_firmware_version_type arg) + { + msg_.firmware_version = std::move(arg); + return Init_LidarState_software_version(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +class Init_LidarState_stamp +{ +public: + Init_LidarState_stamp() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_LidarState_firmware_version stamp(::unitree_go::msg::LidarState::_stamp_type arg) + { + msg_.stamp = std::move(arg); + return Init_LidarState_firmware_version(msg_); + } + +private: + ::unitree_go::msg::LidarState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::LidarState>() +{ + return unitree_go::msg::builder::Init_LidarState_stamp(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.c new file mode 100644 index 0000000..86a7388 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.c @@ -0,0 +1,402 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/lidar_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `firmware_version` +// Member `software_version` +// Member `sdk_version` +#include "rosidl_runtime_c/string_functions.h" + +bool +unitree_go__msg__LidarState__init(unitree_go__msg__LidarState * msg) +{ + if (!msg) { + return false; + } + // stamp + // firmware_version + if (!rosidl_runtime_c__String__init(&msg->firmware_version)) { + unitree_go__msg__LidarState__fini(msg); + return false; + } + // software_version + if (!rosidl_runtime_c__String__init(&msg->software_version)) { + unitree_go__msg__LidarState__fini(msg); + return false; + } + // sdk_version + if (!rosidl_runtime_c__String__init(&msg->sdk_version)) { + unitree_go__msg__LidarState__fini(msg); + return false; + } + // sys_rotation_speed + // com_rotation_speed + // error_state + // cloud_frequency + // cloud_packet_loss_rate + // cloud_size + // cloud_scan_num + // imu_frequency + // imu_packet_loss_rate + // imu_rpy + // serial_recv_stamp + // serial_buffer_size + // serial_buffer_read + return true; +} + +void +unitree_go__msg__LidarState__fini(unitree_go__msg__LidarState * msg) +{ + if (!msg) { + return; + } + // stamp + // firmware_version + rosidl_runtime_c__String__fini(&msg->firmware_version); + // software_version + rosidl_runtime_c__String__fini(&msg->software_version); + // sdk_version + rosidl_runtime_c__String__fini(&msg->sdk_version); + // sys_rotation_speed + // com_rotation_speed + // error_state + // cloud_frequency + // cloud_packet_loss_rate + // cloud_size + // cloud_scan_num + // imu_frequency + // imu_packet_loss_rate + // imu_rpy + // serial_recv_stamp + // serial_buffer_size + // serial_buffer_read +} + +bool +unitree_go__msg__LidarState__are_equal(const unitree_go__msg__LidarState * lhs, const unitree_go__msg__LidarState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // stamp + if (lhs->stamp != rhs->stamp) { + return false; + } + // firmware_version + if (!rosidl_runtime_c__String__are_equal( + &(lhs->firmware_version), &(rhs->firmware_version))) + { + return false; + } + // software_version + if (!rosidl_runtime_c__String__are_equal( + &(lhs->software_version), &(rhs->software_version))) + { + return false; + } + // sdk_version + if (!rosidl_runtime_c__String__are_equal( + &(lhs->sdk_version), &(rhs->sdk_version))) + { + return false; + } + // sys_rotation_speed + if (lhs->sys_rotation_speed != rhs->sys_rotation_speed) { + return false; + } + // com_rotation_speed + if (lhs->com_rotation_speed != rhs->com_rotation_speed) { + return false; + } + // error_state + if (lhs->error_state != rhs->error_state) { + return false; + } + // cloud_frequency + if (lhs->cloud_frequency != rhs->cloud_frequency) { + return false; + } + // cloud_packet_loss_rate + if (lhs->cloud_packet_loss_rate != rhs->cloud_packet_loss_rate) { + return false; + } + // cloud_size + if (lhs->cloud_size != rhs->cloud_size) { + return false; + } + // cloud_scan_num + if (lhs->cloud_scan_num != rhs->cloud_scan_num) { + return false; + } + // imu_frequency + if (lhs->imu_frequency != rhs->imu_frequency) { + return false; + } + // imu_packet_loss_rate + if (lhs->imu_packet_loss_rate != rhs->imu_packet_loss_rate) { + return false; + } + // imu_rpy + for (size_t i = 0; i < 3; ++i) { + if (lhs->imu_rpy[i] != rhs->imu_rpy[i]) { + return false; + } + } + // serial_recv_stamp + if (lhs->serial_recv_stamp != rhs->serial_recv_stamp) { + return false; + } + // serial_buffer_size + if (lhs->serial_buffer_size != rhs->serial_buffer_size) { + return false; + } + // serial_buffer_read + if (lhs->serial_buffer_read != rhs->serial_buffer_read) { + return false; + } + return true; +} + +bool +unitree_go__msg__LidarState__copy( + const unitree_go__msg__LidarState * input, + unitree_go__msg__LidarState * output) +{ + if (!input || !output) { + return false; + } + // stamp + output->stamp = input->stamp; + // firmware_version + if (!rosidl_runtime_c__String__copy( + &(input->firmware_version), &(output->firmware_version))) + { + return false; + } + // software_version + if (!rosidl_runtime_c__String__copy( + &(input->software_version), &(output->software_version))) + { + return false; + } + // sdk_version + if (!rosidl_runtime_c__String__copy( + &(input->sdk_version), &(output->sdk_version))) + { + return false; + } + // sys_rotation_speed + output->sys_rotation_speed = input->sys_rotation_speed; + // com_rotation_speed + output->com_rotation_speed = input->com_rotation_speed; + // error_state + output->error_state = input->error_state; + // cloud_frequency + output->cloud_frequency = input->cloud_frequency; + // cloud_packet_loss_rate + output->cloud_packet_loss_rate = input->cloud_packet_loss_rate; + // cloud_size + output->cloud_size = input->cloud_size; + // cloud_scan_num + output->cloud_scan_num = input->cloud_scan_num; + // imu_frequency + output->imu_frequency = input->imu_frequency; + // imu_packet_loss_rate + output->imu_packet_loss_rate = input->imu_packet_loss_rate; + // imu_rpy + for (size_t i = 0; i < 3; ++i) { + output->imu_rpy[i] = input->imu_rpy[i]; + } + // serial_recv_stamp + output->serial_recv_stamp = input->serial_recv_stamp; + // serial_buffer_size + output->serial_buffer_size = input->serial_buffer_size; + // serial_buffer_read + output->serial_buffer_read = input->serial_buffer_read; + return true; +} + +unitree_go__msg__LidarState * +unitree_go__msg__LidarState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LidarState * msg = (unitree_go__msg__LidarState *)allocator.allocate(sizeof(unitree_go__msg__LidarState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__LidarState)); + bool success = unitree_go__msg__LidarState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__LidarState__destroy(unitree_go__msg__LidarState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__LidarState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__LidarState__Sequence__init(unitree_go__msg__LidarState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LidarState * data = NULL; + + if (size) { + data = (unitree_go__msg__LidarState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__LidarState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__LidarState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__LidarState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__LidarState__Sequence__fini(unitree_go__msg__LidarState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__LidarState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__LidarState__Sequence * +unitree_go__msg__LidarState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LidarState__Sequence * array = (unitree_go__msg__LidarState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__LidarState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__LidarState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__LidarState__Sequence__destroy(unitree_go__msg__LidarState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__LidarState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__LidarState__Sequence__are_equal(const unitree_go__msg__LidarState__Sequence * lhs, const unitree_go__msg__LidarState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__LidarState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__LidarState__Sequence__copy( + const unitree_go__msg__LidarState__Sequence * input, + unitree_go__msg__LidarState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__LidarState); + unitree_go__msg__LidarState * data = + (unitree_go__msg__LidarState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__LidarState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__LidarState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__LidarState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.h new file mode 100644 index 0000000..fd634b8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/lidar_state__struct.h" + +/// Initialize msg/LidarState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__LidarState + * )) before or use + * unitree_go__msg__LidarState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LidarState__init(unitree_go__msg__LidarState * msg); + +/// Finalize msg/LidarState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LidarState__fini(unitree_go__msg__LidarState * msg); + +/// Create msg/LidarState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__LidarState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__LidarState * +unitree_go__msg__LidarState__create(); + +/// Destroy msg/LidarState message. +/** + * It calls + * unitree_go__msg__LidarState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LidarState__destroy(unitree_go__msg__LidarState * msg); + +/// Check for msg/LidarState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LidarState__are_equal(const unitree_go__msg__LidarState * lhs, const unitree_go__msg__LidarState * rhs); + +/// Copy a msg/LidarState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LidarState__copy( + const unitree_go__msg__LidarState * input, + unitree_go__msg__LidarState * output); + +/// Initialize array of msg/LidarState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__LidarState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LidarState__Sequence__init(unitree_go__msg__LidarState__Sequence * array, size_t size); + +/// Finalize array of msg/LidarState messages. +/** + * It calls + * unitree_go__msg__LidarState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LidarState__Sequence__fini(unitree_go__msg__LidarState__Sequence * array); + +/// Create array of msg/LidarState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__LidarState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__LidarState__Sequence * +unitree_go__msg__LidarState__Sequence__create(size_t size); + +/// Destroy array of msg/LidarState messages. +/** + * It calls + * unitree_go__msg__LidarState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LidarState__Sequence__destroy(unitree_go__msg__LidarState__Sequence * array); + +/// Check for msg/LidarState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LidarState__Sequence__are_equal(const unitree_go__msg__LidarState__Sequence * lhs, const unitree_go__msg__LidarState__Sequence * rhs); + +/// Copy an array of msg/LidarState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LidarState__Sequence__copy( + const unitree_go__msg__LidarState__Sequence * input, + unitree_go__msg__LidarState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..54e4d69 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__LidarState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__LidarState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, LidarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..1ea1cc1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/lidar_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::LidarState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::LidarState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::LidarState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_LidarState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, LidarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..322636c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, LidarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..460abde --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, LidarState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.h new file mode 100644 index 0000000..b7929f1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.h @@ -0,0 +1,62 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'firmware_version' +// Member 'software_version' +// Member 'sdk_version' +#include "rosidl_runtime_c/string.h" + +// Struct defined in msg/LidarState in the package unitree_go. +typedef struct unitree_go__msg__LidarState +{ + double stamp; + rosidl_runtime_c__String firmware_version; + rosidl_runtime_c__String software_version; + rosidl_runtime_c__String sdk_version; + float sys_rotation_speed; + float com_rotation_speed; + uint8_t error_state; + float cloud_frequency; + float cloud_packet_loss_rate; + uint32_t cloud_size; + uint32_t cloud_scan_num; + float imu_frequency; + float imu_packet_loss_rate; + float imu_rpy[3]; + double serial_recv_stamp; + uint32_t serial_buffer_size; + uint32_t serial_buffer_read; +} unitree_go__msg__LidarState; + +// Struct for a sequence of unitree_go__msg__LidarState. +typedef struct unitree_go__msg__LidarState__Sequence +{ + unitree_go__msg__LidarState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__LidarState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.hpp new file mode 100644 index 0000000..d2726c5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__struct.hpp @@ -0,0 +1,357 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__LidarState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__LidarState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct LidarState_ +{ + using Type = LidarState_; + + explicit LidarState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->stamp = 0.0; + this->firmware_version = ""; + this->software_version = ""; + this->sdk_version = ""; + this->sys_rotation_speed = 0.0f; + this->com_rotation_speed = 0.0f; + this->error_state = 0; + this->cloud_frequency = 0.0f; + this->cloud_packet_loss_rate = 0.0f; + this->cloud_size = 0ul; + this->cloud_scan_num = 0ul; + this->imu_frequency = 0.0f; + this->imu_packet_loss_rate = 0.0f; + std::fill::iterator, float>(this->imu_rpy.begin(), this->imu_rpy.end(), 0.0f); + this->serial_recv_stamp = 0.0; + this->serial_buffer_size = 0ul; + this->serial_buffer_read = 0ul; + } + } + + explicit LidarState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : firmware_version(_alloc), + software_version(_alloc), + sdk_version(_alloc), + imu_rpy(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->stamp = 0.0; + this->firmware_version = ""; + this->software_version = ""; + this->sdk_version = ""; + this->sys_rotation_speed = 0.0f; + this->com_rotation_speed = 0.0f; + this->error_state = 0; + this->cloud_frequency = 0.0f; + this->cloud_packet_loss_rate = 0.0f; + this->cloud_size = 0ul; + this->cloud_scan_num = 0ul; + this->imu_frequency = 0.0f; + this->imu_packet_loss_rate = 0.0f; + std::fill::iterator, float>(this->imu_rpy.begin(), this->imu_rpy.end(), 0.0f); + this->serial_recv_stamp = 0.0; + this->serial_buffer_size = 0ul; + this->serial_buffer_read = 0ul; + } + } + + // field types and members + using _stamp_type = + double; + _stamp_type stamp; + using _firmware_version_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _firmware_version_type firmware_version; + using _software_version_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _software_version_type software_version; + using _sdk_version_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _sdk_version_type sdk_version; + using _sys_rotation_speed_type = + float; + _sys_rotation_speed_type sys_rotation_speed; + using _com_rotation_speed_type = + float; + _com_rotation_speed_type com_rotation_speed; + using _error_state_type = + uint8_t; + _error_state_type error_state; + using _cloud_frequency_type = + float; + _cloud_frequency_type cloud_frequency; + using _cloud_packet_loss_rate_type = + float; + _cloud_packet_loss_rate_type cloud_packet_loss_rate; + using _cloud_size_type = + uint32_t; + _cloud_size_type cloud_size; + using _cloud_scan_num_type = + uint32_t; + _cloud_scan_num_type cloud_scan_num; + using _imu_frequency_type = + float; + _imu_frequency_type imu_frequency; + using _imu_packet_loss_rate_type = + float; + _imu_packet_loss_rate_type imu_packet_loss_rate; + using _imu_rpy_type = + std::array; + _imu_rpy_type imu_rpy; + using _serial_recv_stamp_type = + double; + _serial_recv_stamp_type serial_recv_stamp; + using _serial_buffer_size_type = + uint32_t; + _serial_buffer_size_type serial_buffer_size; + using _serial_buffer_read_type = + uint32_t; + _serial_buffer_read_type serial_buffer_read; + + // setters for named parameter idiom + Type & set__stamp( + const double & _arg) + { + this->stamp = _arg; + return *this; + } + Type & set__firmware_version( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->firmware_version = _arg; + return *this; + } + Type & set__software_version( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->software_version = _arg; + return *this; + } + Type & set__sdk_version( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->sdk_version = _arg; + return *this; + } + Type & set__sys_rotation_speed( + const float & _arg) + { + this->sys_rotation_speed = _arg; + return *this; + } + Type & set__com_rotation_speed( + const float & _arg) + { + this->com_rotation_speed = _arg; + return *this; + } + Type & set__error_state( + const uint8_t & _arg) + { + this->error_state = _arg; + return *this; + } + Type & set__cloud_frequency( + const float & _arg) + { + this->cloud_frequency = _arg; + return *this; + } + Type & set__cloud_packet_loss_rate( + const float & _arg) + { + this->cloud_packet_loss_rate = _arg; + return *this; + } + Type & set__cloud_size( + const uint32_t & _arg) + { + this->cloud_size = _arg; + return *this; + } + Type & set__cloud_scan_num( + const uint32_t & _arg) + { + this->cloud_scan_num = _arg; + return *this; + } + Type & set__imu_frequency( + const float & _arg) + { + this->imu_frequency = _arg; + return *this; + } + Type & set__imu_packet_loss_rate( + const float & _arg) + { + this->imu_packet_loss_rate = _arg; + return *this; + } + Type & set__imu_rpy( + const std::array & _arg) + { + this->imu_rpy = _arg; + return *this; + } + Type & set__serial_recv_stamp( + const double & _arg) + { + this->serial_recv_stamp = _arg; + return *this; + } + Type & set__serial_buffer_size( + const uint32_t & _arg) + { + this->serial_buffer_size = _arg; + return *this; + } + Type & set__serial_buffer_read( + const uint32_t & _arg) + { + this->serial_buffer_read = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::LidarState_ *; + using ConstRawPtr = + const unitree_go::msg::LidarState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__LidarState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__LidarState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const LidarState_ & other) const + { + if (this->stamp != other.stamp) { + return false; + } + if (this->firmware_version != other.firmware_version) { + return false; + } + if (this->software_version != other.software_version) { + return false; + } + if (this->sdk_version != other.sdk_version) { + return false; + } + if (this->sys_rotation_speed != other.sys_rotation_speed) { + return false; + } + if (this->com_rotation_speed != other.com_rotation_speed) { + return false; + } + if (this->error_state != other.error_state) { + return false; + } + if (this->cloud_frequency != other.cloud_frequency) { + return false; + } + if (this->cloud_packet_loss_rate != other.cloud_packet_loss_rate) { + return false; + } + if (this->cloud_size != other.cloud_size) { + return false; + } + if (this->cloud_scan_num != other.cloud_scan_num) { + return false; + } + if (this->imu_frequency != other.imu_frequency) { + return false; + } + if (this->imu_packet_loss_rate != other.imu_packet_loss_rate) { + return false; + } + if (this->imu_rpy != other.imu_rpy) { + return false; + } + if (this->serial_recv_stamp != other.serial_recv_stamp) { + return false; + } + if (this->serial_buffer_size != other.serial_buffer_size) { + return false; + } + if (this->serial_buffer_read != other.serial_buffer_read) { + return false; + } + return true; + } + bool operator!=(const LidarState_ & other) const + { + return !this->operator==(other); + } +}; // struct LidarState_ + +// alias to use template instance with default allocator +using LidarState = + unitree_go::msg::LidarState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__traits.hpp new file mode 100644 index 0000000..038aac7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/lidar_state__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::LidarState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/LidarState"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.c new file mode 100644 index 0000000..455c5eb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.c @@ -0,0 +1,327 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/lidar_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/lidar_state__functions.h" +#include "unitree_go/msg/detail/lidar_state__struct.h" + + +// Include directives for member types +// Member `firmware_version` +// Member `software_version` +// Member `sdk_version` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void LidarState__rosidl_typesupport_introspection_c__LidarState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__LidarState__init(message_memory); +} + +void LidarState__rosidl_typesupport_introspection_c__LidarState_fini_function(void * message_memory) +{ + unitree_go__msg__LidarState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember LidarState__rosidl_typesupport_introspection_c__LidarState_message_member_array[17] = { + { + "stamp", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, stamp), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "firmware_version", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, firmware_version), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "software_version", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, software_version), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "sdk_version", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, sdk_version), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "sys_rotation_speed", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, sys_rotation_speed), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "com_rotation_speed", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, com_rotation_speed), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "error_state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, error_state), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "cloud_frequency", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, cloud_frequency), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "cloud_packet_loss_rate", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, cloud_packet_loss_rate), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "cloud_size", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, cloud_size), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "cloud_scan_num", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, cloud_scan_num), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "imu_frequency", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, imu_frequency), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "imu_packet_loss_rate", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, imu_packet_loss_rate), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "imu_rpy", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, imu_rpy), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "serial_recv_stamp", // name + rosidl_typesupport_introspection_c__ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, serial_recv_stamp), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "serial_buffer_size", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, serial_buffer_size), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "serial_buffer_read", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LidarState, serial_buffer_read), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers LidarState__rosidl_typesupport_introspection_c__LidarState_message_members = { + "unitree_go__msg", // message namespace + "LidarState", // message name + 17, // number of fields + sizeof(unitree_go__msg__LidarState), + LidarState__rosidl_typesupport_introspection_c__LidarState_message_member_array, // message members + LidarState__rosidl_typesupport_introspection_c__LidarState_init_function, // function to initialize message memory (memory has to be allocated) + LidarState__rosidl_typesupport_introspection_c__LidarState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t LidarState__rosidl_typesupport_introspection_c__LidarState_message_type_support_handle = { + 0, + &LidarState__rosidl_typesupport_introspection_c__LidarState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, LidarState)() { + if (!LidarState__rosidl_typesupport_introspection_c__LidarState_message_type_support_handle.typesupport_identifier) { + LidarState__rosidl_typesupport_introspection_c__LidarState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &LidarState__rosidl_typesupport_introspection_c__LidarState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.cpp new file mode 100644 index 0000000..7678ec7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.cpp @@ -0,0 +1,367 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/lidar_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void LidarState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::LidarState(_init); +} + +void LidarState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~LidarState(); +} + +size_t size_function__LidarState__imu_rpy(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__LidarState__imu_rpy(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LidarState__imu_rpy(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember LidarState_message_member_array[17] = { + { + "stamp", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, stamp), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "firmware_version", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, firmware_version), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "software_version", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, software_version), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "sdk_version", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, sdk_version), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "sys_rotation_speed", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, sys_rotation_speed), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "com_rotation_speed", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, com_rotation_speed), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "error_state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, error_state), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "cloud_frequency", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, cloud_frequency), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "cloud_packet_loss_rate", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, cloud_packet_loss_rate), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "cloud_size", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, cloud_size), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "cloud_scan_num", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, cloud_scan_num), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "imu_frequency", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, imu_frequency), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "imu_packet_loss_rate", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, imu_packet_loss_rate), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "imu_rpy", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, imu_rpy), // bytes offset in struct + nullptr, // default value + size_function__LidarState__imu_rpy, // size() function pointer + get_const_function__LidarState__imu_rpy, // get_const(index) function pointer + get_function__LidarState__imu_rpy, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "serial_recv_stamp", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_DOUBLE, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, serial_recv_stamp), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "serial_buffer_size", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, serial_buffer_size), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "serial_buffer_read", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LidarState, serial_buffer_read), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers LidarState_message_members = { + "unitree_go::msg", // message namespace + "LidarState", // message name + 17, // number of fields + sizeof(unitree_go::msg::LidarState), + LidarState_message_member_array, // message members + LidarState_init_function, // function to initialize message memory (memory has to be allocated) + LidarState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t LidarState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &LidarState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::LidarState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, LidarState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::LidarState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.h new file mode 100644 index 0000000..254eac6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + LidarState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.hpp new file mode 100644 index 0000000..78f4939 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/lidar_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + LidarState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LIDAR_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__builder.hpp new file mode 100644 index 0000000..88c0f97 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__builder.hpp @@ -0,0 +1,263 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__BUILDER_HPP_ + +#include "unitree_go/msg/detail/low_cmd__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_LowCmd_crc +{ +public: + explicit Init_LowCmd_crc(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + ::unitree_go::msg::LowCmd crc(::unitree_go::msg::LowCmd::_crc_type arg) + { + msg_.crc = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_reserve +{ +public: + explicit Init_LowCmd_reserve(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_crc reserve(::unitree_go::msg::LowCmd::_reserve_type arg) + { + msg_.reserve = std::move(arg); + return Init_LowCmd_crc(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_gpio +{ +public: + explicit Init_LowCmd_gpio(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_reserve gpio(::unitree_go::msg::LowCmd::_gpio_type arg) + { + msg_.gpio = std::move(arg); + return Init_LowCmd_reserve(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_fan +{ +public: + explicit Init_LowCmd_fan(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_gpio fan(::unitree_go::msg::LowCmd::_fan_type arg) + { + msg_.fan = std::move(arg); + return Init_LowCmd_gpio(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_led +{ +public: + explicit Init_LowCmd_led(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_fan led(::unitree_go::msg::LowCmd::_led_type arg) + { + msg_.led = std::move(arg); + return Init_LowCmd_fan(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_wireless_remote +{ +public: + explicit Init_LowCmd_wireless_remote(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_led wireless_remote(::unitree_go::msg::LowCmd::_wireless_remote_type arg) + { + msg_.wireless_remote = std::move(arg); + return Init_LowCmd_led(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_bms_cmd +{ +public: + explicit Init_LowCmd_bms_cmd(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_wireless_remote bms_cmd(::unitree_go::msg::LowCmd::_bms_cmd_type arg) + { + msg_.bms_cmd = std::move(arg); + return Init_LowCmd_wireless_remote(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_motor_cmd +{ +public: + explicit Init_LowCmd_motor_cmd(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_bms_cmd motor_cmd(::unitree_go::msg::LowCmd::_motor_cmd_type arg) + { + msg_.motor_cmd = std::move(arg); + return Init_LowCmd_bms_cmd(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_bandwidth +{ +public: + explicit Init_LowCmd_bandwidth(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_motor_cmd bandwidth(::unitree_go::msg::LowCmd::_bandwidth_type arg) + { + msg_.bandwidth = std::move(arg); + return Init_LowCmd_motor_cmd(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_version +{ +public: + explicit Init_LowCmd_version(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_bandwidth version(::unitree_go::msg::LowCmd::_version_type arg) + { + msg_.version = std::move(arg); + return Init_LowCmd_bandwidth(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_sn +{ +public: + explicit Init_LowCmd_sn(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_version sn(::unitree_go::msg::LowCmd::_sn_type arg) + { + msg_.sn = std::move(arg); + return Init_LowCmd_version(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_frame_reserve +{ +public: + explicit Init_LowCmd_frame_reserve(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_sn frame_reserve(::unitree_go::msg::LowCmd::_frame_reserve_type arg) + { + msg_.frame_reserve = std::move(arg); + return Init_LowCmd_sn(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_level_flag +{ +public: + explicit Init_LowCmd_level_flag(::unitree_go::msg::LowCmd & msg) + : msg_(msg) + {} + Init_LowCmd_frame_reserve level_flag(::unitree_go::msg::LowCmd::_level_flag_type arg) + { + msg_.level_flag = std::move(arg); + return Init_LowCmd_frame_reserve(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +class Init_LowCmd_head +{ +public: + Init_LowCmd_head() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_LowCmd_level_flag head(::unitree_go::msg::LowCmd::_head_type arg) + { + msg_.head = std::move(arg); + return Init_LowCmd_level_flag(msg_); + } + +private: + ::unitree_go::msg::LowCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::LowCmd>() +{ + return unitree_go::msg::builder::Init_LowCmd_head(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.c new file mode 100644 index 0000000..75f379a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.c @@ -0,0 +1,395 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/low_cmd__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `motor_cmd` +#include "unitree_go/msg/detail/motor_cmd__functions.h" +// Member `bms_cmd` +#include "unitree_go/msg/detail/bms_cmd__functions.h" + +bool +unitree_go__msg__LowCmd__init(unitree_go__msg__LowCmd * msg) +{ + if (!msg) { + return false; + } + // head + // level_flag + // frame_reserve + // sn + // version + // bandwidth + // motor_cmd + for (size_t i = 0; i < 20; ++i) { + if (!unitree_go__msg__MotorCmd__init(&msg->motor_cmd[i])) { + unitree_go__msg__LowCmd__fini(msg); + return false; + } + } + // bms_cmd + if (!unitree_go__msg__BmsCmd__init(&msg->bms_cmd)) { + unitree_go__msg__LowCmd__fini(msg); + return false; + } + // wireless_remote + // led + // fan + // gpio + // reserve + // crc + return true; +} + +void +unitree_go__msg__LowCmd__fini(unitree_go__msg__LowCmd * msg) +{ + if (!msg) { + return; + } + // head + // level_flag + // frame_reserve + // sn + // version + // bandwidth + // motor_cmd + for (size_t i = 0; i < 20; ++i) { + unitree_go__msg__MotorCmd__fini(&msg->motor_cmd[i]); + } + // bms_cmd + unitree_go__msg__BmsCmd__fini(&msg->bms_cmd); + // wireless_remote + // led + // fan + // gpio + // reserve + // crc +} + +bool +unitree_go__msg__LowCmd__are_equal(const unitree_go__msg__LowCmd * lhs, const unitree_go__msg__LowCmd * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // head + for (size_t i = 0; i < 2; ++i) { + if (lhs->head[i] != rhs->head[i]) { + return false; + } + } + // level_flag + if (lhs->level_flag != rhs->level_flag) { + return false; + } + // frame_reserve + if (lhs->frame_reserve != rhs->frame_reserve) { + return false; + } + // sn + for (size_t i = 0; i < 2; ++i) { + if (lhs->sn[i] != rhs->sn[i]) { + return false; + } + } + // version + for (size_t i = 0; i < 2; ++i) { + if (lhs->version[i] != rhs->version[i]) { + return false; + } + } + // bandwidth + if (lhs->bandwidth != rhs->bandwidth) { + return false; + } + // motor_cmd + for (size_t i = 0; i < 20; ++i) { + if (!unitree_go__msg__MotorCmd__are_equal( + &(lhs->motor_cmd[i]), &(rhs->motor_cmd[i]))) + { + return false; + } + } + // bms_cmd + if (!unitree_go__msg__BmsCmd__are_equal( + &(lhs->bms_cmd), &(rhs->bms_cmd))) + { + return false; + } + // wireless_remote + for (size_t i = 0; i < 40; ++i) { + if (lhs->wireless_remote[i] != rhs->wireless_remote[i]) { + return false; + } + } + // led + for (size_t i = 0; i < 12; ++i) { + if (lhs->led[i] != rhs->led[i]) { + return false; + } + } + // fan + for (size_t i = 0; i < 2; ++i) { + if (lhs->fan[i] != rhs->fan[i]) { + return false; + } + } + // gpio + if (lhs->gpio != rhs->gpio) { + return false; + } + // reserve + if (lhs->reserve != rhs->reserve) { + return false; + } + // crc + if (lhs->crc != rhs->crc) { + return false; + } + return true; +} + +bool +unitree_go__msg__LowCmd__copy( + const unitree_go__msg__LowCmd * input, + unitree_go__msg__LowCmd * output) +{ + if (!input || !output) { + return false; + } + // head + for (size_t i = 0; i < 2; ++i) { + output->head[i] = input->head[i]; + } + // level_flag + output->level_flag = input->level_flag; + // frame_reserve + output->frame_reserve = input->frame_reserve; + // sn + for (size_t i = 0; i < 2; ++i) { + output->sn[i] = input->sn[i]; + } + // version + for (size_t i = 0; i < 2; ++i) { + output->version[i] = input->version[i]; + } + // bandwidth + output->bandwidth = input->bandwidth; + // motor_cmd + for (size_t i = 0; i < 20; ++i) { + if (!unitree_go__msg__MotorCmd__copy( + &(input->motor_cmd[i]), &(output->motor_cmd[i]))) + { + return false; + } + } + // bms_cmd + if (!unitree_go__msg__BmsCmd__copy( + &(input->bms_cmd), &(output->bms_cmd))) + { + return false; + } + // wireless_remote + for (size_t i = 0; i < 40; ++i) { + output->wireless_remote[i] = input->wireless_remote[i]; + } + // led + for (size_t i = 0; i < 12; ++i) { + output->led[i] = input->led[i]; + } + // fan + for (size_t i = 0; i < 2; ++i) { + output->fan[i] = input->fan[i]; + } + // gpio + output->gpio = input->gpio; + // reserve + output->reserve = input->reserve; + // crc + output->crc = input->crc; + return true; +} + +unitree_go__msg__LowCmd * +unitree_go__msg__LowCmd__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LowCmd * msg = (unitree_go__msg__LowCmd *)allocator.allocate(sizeof(unitree_go__msg__LowCmd), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__LowCmd)); + bool success = unitree_go__msg__LowCmd__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__LowCmd__destroy(unitree_go__msg__LowCmd * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__LowCmd__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__LowCmd__Sequence__init(unitree_go__msg__LowCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LowCmd * data = NULL; + + if (size) { + data = (unitree_go__msg__LowCmd *)allocator.zero_allocate(size, sizeof(unitree_go__msg__LowCmd), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__LowCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__LowCmd__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__LowCmd__Sequence__fini(unitree_go__msg__LowCmd__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__LowCmd__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__LowCmd__Sequence * +unitree_go__msg__LowCmd__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LowCmd__Sequence * array = (unitree_go__msg__LowCmd__Sequence *)allocator.allocate(sizeof(unitree_go__msg__LowCmd__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__LowCmd__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__LowCmd__Sequence__destroy(unitree_go__msg__LowCmd__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__LowCmd__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__LowCmd__Sequence__are_equal(const unitree_go__msg__LowCmd__Sequence * lhs, const unitree_go__msg__LowCmd__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__LowCmd__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__LowCmd__Sequence__copy( + const unitree_go__msg__LowCmd__Sequence * input, + unitree_go__msg__LowCmd__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__LowCmd); + unitree_go__msg__LowCmd * data = + (unitree_go__msg__LowCmd *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__LowCmd__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__LowCmd__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__LowCmd__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.h new file mode 100644 index 0000000..1c5b4fb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/low_cmd__struct.h" + +/// Initialize msg/LowCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__LowCmd + * )) before or use + * unitree_go__msg__LowCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowCmd__init(unitree_go__msg__LowCmd * msg); + +/// Finalize msg/LowCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowCmd__fini(unitree_go__msg__LowCmd * msg); + +/// Create msg/LowCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__LowCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__LowCmd * +unitree_go__msg__LowCmd__create(); + +/// Destroy msg/LowCmd message. +/** + * It calls + * unitree_go__msg__LowCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowCmd__destroy(unitree_go__msg__LowCmd * msg); + +/// Check for msg/LowCmd message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowCmd__are_equal(const unitree_go__msg__LowCmd * lhs, const unitree_go__msg__LowCmd * rhs); + +/// Copy a msg/LowCmd message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowCmd__copy( + const unitree_go__msg__LowCmd * input, + unitree_go__msg__LowCmd * output); + +/// Initialize array of msg/LowCmd messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__LowCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowCmd__Sequence__init(unitree_go__msg__LowCmd__Sequence * array, size_t size); + +/// Finalize array of msg/LowCmd messages. +/** + * It calls + * unitree_go__msg__LowCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowCmd__Sequence__fini(unitree_go__msg__LowCmd__Sequence * array); + +/// Create array of msg/LowCmd messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__LowCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__LowCmd__Sequence * +unitree_go__msg__LowCmd__Sequence__create(size_t size); + +/// Destroy array of msg/LowCmd messages. +/** + * It calls + * unitree_go__msg__LowCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowCmd__Sequence__destroy(unitree_go__msg__LowCmd__Sequence * array); + +/// Check for msg/LowCmd message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowCmd__Sequence__are_equal(const unitree_go__msg__LowCmd__Sequence * lhs, const unitree_go__msg__LowCmd__Sequence * rhs); + +/// Copy an array of msg/LowCmd messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowCmd__Sequence__copy( + const unitree_go__msg__LowCmd__Sequence * input, + unitree_go__msg__LowCmd__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..f505dd9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__LowCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__LowCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, LowCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..1137270 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/low_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::LowCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::LowCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::LowCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_LowCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, LowCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..b254918 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, LowCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..aecc3bf --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, LowCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.h new file mode 100644 index 0000000..c170ea8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.h @@ -0,0 +1,59 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'motor_cmd' +#include "unitree_go/msg/detail/motor_cmd__struct.h" +// Member 'bms_cmd' +#include "unitree_go/msg/detail/bms_cmd__struct.h" + +// Struct defined in msg/LowCmd in the package unitree_go. +typedef struct unitree_go__msg__LowCmd +{ + uint8_t head[2]; + uint8_t level_flag; + uint8_t frame_reserve; + uint32_t sn[2]; + uint32_t version[2]; + uint16_t bandwidth; + unitree_go__msg__MotorCmd motor_cmd[20]; + unitree_go__msg__BmsCmd bms_cmd; + uint8_t wireless_remote[40]; + uint8_t led[12]; + uint8_t fan[2]; + uint8_t gpio; + uint32_t reserve; + uint32_t crc; +} unitree_go__msg__LowCmd; + +// Struct for a sequence of unitree_go__msg__LowCmd. +typedef struct unitree_go__msg__LowCmd__Sequence +{ + unitree_go__msg__LowCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__LowCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.hpp new file mode 100644 index 0000000..26681c5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__struct.hpp @@ -0,0 +1,324 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'motor_cmd' +#include "unitree_go/msg/detail/motor_cmd__struct.hpp" +// Member 'bms_cmd' +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__LowCmd __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__LowCmd __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct LowCmd_ +{ + using Type = LowCmd_; + + explicit LowCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : bms_cmd(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, uint8_t>(this->head.begin(), this->head.end(), 0); + this->level_flag = 0; + this->frame_reserve = 0; + std::fill::iterator, uint32_t>(this->sn.begin(), this->sn.end(), 0ul); + std::fill::iterator, uint32_t>(this->version.begin(), this->version.end(), 0ul); + this->bandwidth = 0; + this->motor_cmd.fill(unitree_go::msg::MotorCmd_{_init}); + std::fill::iterator, uint8_t>(this->wireless_remote.begin(), this->wireless_remote.end(), 0); + std::fill::iterator, uint8_t>(this->led.begin(), this->led.end(), 0); + std::fill::iterator, uint8_t>(this->fan.begin(), this->fan.end(), 0); + this->gpio = 0; + this->reserve = 0ul; + this->crc = 0ul; + } + } + + explicit LowCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : head(_alloc), + sn(_alloc), + version(_alloc), + motor_cmd(_alloc), + bms_cmd(_alloc, _init), + wireless_remote(_alloc), + led(_alloc), + fan(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, uint8_t>(this->head.begin(), this->head.end(), 0); + this->level_flag = 0; + this->frame_reserve = 0; + std::fill::iterator, uint32_t>(this->sn.begin(), this->sn.end(), 0ul); + std::fill::iterator, uint32_t>(this->version.begin(), this->version.end(), 0ul); + this->bandwidth = 0; + this->motor_cmd.fill(unitree_go::msg::MotorCmd_{_alloc, _init}); + std::fill::iterator, uint8_t>(this->wireless_remote.begin(), this->wireless_remote.end(), 0); + std::fill::iterator, uint8_t>(this->led.begin(), this->led.end(), 0); + std::fill::iterator, uint8_t>(this->fan.begin(), this->fan.end(), 0); + this->gpio = 0; + this->reserve = 0ul; + this->crc = 0ul; + } + } + + // field types and members + using _head_type = + std::array; + _head_type head; + using _level_flag_type = + uint8_t; + _level_flag_type level_flag; + using _frame_reserve_type = + uint8_t; + _frame_reserve_type frame_reserve; + using _sn_type = + std::array; + _sn_type sn; + using _version_type = + std::array; + _version_type version; + using _bandwidth_type = + uint16_t; + _bandwidth_type bandwidth; + using _motor_cmd_type = + std::array, 20>; + _motor_cmd_type motor_cmd; + using _bms_cmd_type = + unitree_go::msg::BmsCmd_; + _bms_cmd_type bms_cmd; + using _wireless_remote_type = + std::array; + _wireless_remote_type wireless_remote; + using _led_type = + std::array; + _led_type led; + using _fan_type = + std::array; + _fan_type fan; + using _gpio_type = + uint8_t; + _gpio_type gpio; + using _reserve_type = + uint32_t; + _reserve_type reserve; + using _crc_type = + uint32_t; + _crc_type crc; + + // setters for named parameter idiom + Type & set__head( + const std::array & _arg) + { + this->head = _arg; + return *this; + } + Type & set__level_flag( + const uint8_t & _arg) + { + this->level_flag = _arg; + return *this; + } + Type & set__frame_reserve( + const uint8_t & _arg) + { + this->frame_reserve = _arg; + return *this; + } + Type & set__sn( + const std::array & _arg) + { + this->sn = _arg; + return *this; + } + Type & set__version( + const std::array & _arg) + { + this->version = _arg; + return *this; + } + Type & set__bandwidth( + const uint16_t & _arg) + { + this->bandwidth = _arg; + return *this; + } + Type & set__motor_cmd( + const std::array, 20> & _arg) + { + this->motor_cmd = _arg; + return *this; + } + Type & set__bms_cmd( + const unitree_go::msg::BmsCmd_ & _arg) + { + this->bms_cmd = _arg; + return *this; + } + Type & set__wireless_remote( + const std::array & _arg) + { + this->wireless_remote = _arg; + return *this; + } + Type & set__led( + const std::array & _arg) + { + this->led = _arg; + return *this; + } + Type & set__fan( + const std::array & _arg) + { + this->fan = _arg; + return *this; + } + Type & set__gpio( + const uint8_t & _arg) + { + this->gpio = _arg; + return *this; + } + Type & set__reserve( + const uint32_t & _arg) + { + this->reserve = _arg; + return *this; + } + Type & set__crc( + const uint32_t & _arg) + { + this->crc = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::LowCmd_ *; + using ConstRawPtr = + const unitree_go::msg::LowCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__LowCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__LowCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const LowCmd_ & other) const + { + if (this->head != other.head) { + return false; + } + if (this->level_flag != other.level_flag) { + return false; + } + if (this->frame_reserve != other.frame_reserve) { + return false; + } + if (this->sn != other.sn) { + return false; + } + if (this->version != other.version) { + return false; + } + if (this->bandwidth != other.bandwidth) { + return false; + } + if (this->motor_cmd != other.motor_cmd) { + return false; + } + if (this->bms_cmd != other.bms_cmd) { + return false; + } + if (this->wireless_remote != other.wireless_remote) { + return false; + } + if (this->led != other.led) { + return false; + } + if (this->fan != other.fan) { + return false; + } + if (this->gpio != other.gpio) { + return false; + } + if (this->reserve != other.reserve) { + return false; + } + if (this->crc != other.crc) { + return false; + } + return true; + } + bool operator!=(const LowCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct LowCmd_ + +// alias to use template instance with default allocator +using LowCmd = + unitree_go::msg::LowCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__traits.hpp new file mode 100644 index 0000000..cc104c8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__traits.hpp @@ -0,0 +1,48 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__TRAITS_HPP_ + +#include "unitree_go/msg/detail/low_cmd__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'motor_cmd' +#include "unitree_go/msg/detail/motor_cmd__traits.hpp" +// Member 'bms_cmd' +#include "unitree_go/msg/detail/bms_cmd__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::LowCmd"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/LowCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.c new file mode 100644 index 0000000..d515586 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.c @@ -0,0 +1,313 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/low_cmd__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/low_cmd__functions.h" +#include "unitree_go/msg/detail/low_cmd__struct.h" + + +// Include directives for member types +// Member `motor_cmd` +#include "unitree_go/msg/motor_cmd.h" +// Member `motor_cmd` +#include "unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_c.h" +// Member `bms_cmd` +#include "unitree_go/msg/bms_cmd.h" +// Member `bms_cmd` +#include "unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void LowCmd__rosidl_typesupport_introspection_c__LowCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__LowCmd__init(message_memory); +} + +void LowCmd__rosidl_typesupport_introspection_c__LowCmd_fini_function(void * message_memory) +{ + unitree_go__msg__LowCmd__fini(message_memory); +} + +size_t LowCmd__rosidl_typesupport_introspection_c__size_function__MotorCmd__motor_cmd( + const void * untyped_member) +{ + (void)untyped_member; + return 20; +} + +const void * LowCmd__rosidl_typesupport_introspection_c__get_const_function__MotorCmd__motor_cmd( + const void * untyped_member, size_t index) +{ + const unitree_go__msg__MotorCmd ** member = + (const unitree_go__msg__MotorCmd **)(untyped_member); + return &(*member)[index]; +} + +void * LowCmd__rosidl_typesupport_introspection_c__get_function__MotorCmd__motor_cmd( + void * untyped_member, size_t index) +{ + unitree_go__msg__MotorCmd ** member = + (unitree_go__msg__MotorCmd **)(untyped_member); + return &(*member)[index]; +} + +static rosidl_typesupport_introspection_c__MessageMember LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_member_array[14] = { + { + "head", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, head), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "level_flag", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, level_flag), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "frame_reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, frame_reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "sn", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, sn), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "version", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, version), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bandwidth", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT16, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, bandwidth), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "motor_cmd", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + true, // is array + 20, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, motor_cmd), // bytes offset in struct + NULL, // default value + LowCmd__rosidl_typesupport_introspection_c__size_function__MotorCmd__motor_cmd, // size() function pointer + LowCmd__rosidl_typesupport_introspection_c__get_const_function__MotorCmd__motor_cmd, // get_const(index) function pointer + LowCmd__rosidl_typesupport_introspection_c__get_function__MotorCmd__motor_cmd, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bms_cmd", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, bms_cmd), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "wireless_remote", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 40, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, wireless_remote), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "led", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 12, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, led), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "fan", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, fan), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gpio", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, gpio), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "crc", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowCmd, crc), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_members = { + "unitree_go__msg", // message namespace + "LowCmd", // message name + 14, // number of fields + sizeof(unitree_go__msg__LowCmd), + LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_member_array, // message members + LowCmd__rosidl_typesupport_introspection_c__LowCmd_init_function, // function to initialize message memory (memory has to be allocated) + LowCmd__rosidl_typesupport_introspection_c__LowCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_type_support_handle = { + 0, + &LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, LowCmd)() { + LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_member_array[6].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, MotorCmd)(); + LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_member_array[7].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsCmd)(); + if (!LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_type_support_handle.typesupport_identifier) { + LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &LowCmd__rosidl_typesupport_introspection_c__LowCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.cpp new file mode 100644 index 0000000..5ecc5d0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.cpp @@ -0,0 +1,442 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/low_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void LowCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::LowCmd(_init); +} + +void LowCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~LowCmd(); +} + +size_t size_function__LowCmd__head(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowCmd__head(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__head(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowCmd__sn(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowCmd__sn(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__sn(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowCmd__version(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowCmd__version(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__version(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowCmd__motor_cmd(const void * untyped_member) +{ + (void)untyped_member; + return 20; +} + +const void * get_const_function__LowCmd__motor_cmd(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__motor_cmd(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowCmd__wireless_remote(const void * untyped_member) +{ + (void)untyped_member; + return 40; +} + +const void * get_const_function__LowCmd__wireless_remote(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__wireless_remote(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowCmd__led(const void * untyped_member) +{ + (void)untyped_member; + return 12; +} + +const void * get_const_function__LowCmd__led(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__led(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowCmd__fan(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowCmd__fan(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowCmd__fan(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember LowCmd_message_member_array[14] = { + { + "head", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, head), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__head, // size() function pointer + get_const_function__LowCmd__head, // get_const(index) function pointer + get_function__LowCmd__head, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "level_flag", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, level_flag), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "frame_reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, frame_reserve), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "sn", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, sn), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__sn, // size() function pointer + get_const_function__LowCmd__sn, // get_const(index) function pointer + get_function__LowCmd__sn, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "version", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, version), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__version, // size() function pointer + get_const_function__LowCmd__version, // get_const(index) function pointer + get_function__LowCmd__version, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bandwidth", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT16, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, bandwidth), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "motor_cmd", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + true, // is array + 20, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, motor_cmd), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__motor_cmd, // size() function pointer + get_const_function__LowCmd__motor_cmd, // get_const(index) function pointer + get_function__LowCmd__motor_cmd, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bms_cmd", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, bms_cmd), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "wireless_remote", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 40, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, wireless_remote), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__wireless_remote, // size() function pointer + get_const_function__LowCmd__wireless_remote, // get_const(index) function pointer + get_function__LowCmd__wireless_remote, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "led", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 12, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, led), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__led, // size() function pointer + get_const_function__LowCmd__led, // get_const(index) function pointer + get_function__LowCmd__led, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "fan", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, fan), // bytes offset in struct + nullptr, // default value + size_function__LowCmd__fan, // size() function pointer + get_const_function__LowCmd__fan, // get_const(index) function pointer + get_function__LowCmd__fan, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gpio", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, gpio), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, reserve), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "crc", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowCmd, crc), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers LowCmd_message_members = { + "unitree_go::msg", // message namespace + "LowCmd", // message name + 14, // number of fields + sizeof(unitree_go::msg::LowCmd), + LowCmd_message_member_array, // message members + LowCmd_init_function, // function to initialize message memory (memory has to be allocated) + LowCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t LowCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &LowCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::LowCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, LowCmd)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::LowCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.h new file mode 100644 index 0000000..6575c55 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + LowCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.hpp new file mode 100644 index 0000000..1b3a9bd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_cmd__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_CMD__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_CMD__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + LowCmd +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_CMD__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__builder.hpp new file mode 100644 index 0000000..9b82bde --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__builder.hpp @@ -0,0 +1,391 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/low_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_LowState_crc +{ +public: + explicit Init_LowState_crc(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + ::unitree_go::msg::LowState crc(::unitree_go::msg::LowState::_crc_type arg) + { + msg_.crc = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_reserve +{ +public: + explicit Init_LowState_reserve(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_crc reserve(::unitree_go::msg::LowState::_reserve_type arg) + { + msg_.reserve = std::move(arg); + return Init_LowState_crc(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_fan_frequency +{ +public: + explicit Init_LowState_fan_frequency(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_reserve fan_frequency(::unitree_go::msg::LowState::_fan_frequency_type arg) + { + msg_.fan_frequency = std::move(arg); + return Init_LowState_reserve(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_power_a +{ +public: + explicit Init_LowState_power_a(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_fan_frequency power_a(::unitree_go::msg::LowState::_power_a_type arg) + { + msg_.power_a = std::move(arg); + return Init_LowState_fan_frequency(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_power_v +{ +public: + explicit Init_LowState_power_v(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_power_a power_v(::unitree_go::msg::LowState::_power_v_type arg) + { + msg_.power_v = std::move(arg); + return Init_LowState_power_a(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_temperature_ntc2 +{ +public: + explicit Init_LowState_temperature_ntc2(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_power_v temperature_ntc2(::unitree_go::msg::LowState::_temperature_ntc2_type arg) + { + msg_.temperature_ntc2 = std::move(arg); + return Init_LowState_power_v(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_temperature_ntc1 +{ +public: + explicit Init_LowState_temperature_ntc1(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_temperature_ntc2 temperature_ntc1(::unitree_go::msg::LowState::_temperature_ntc1_type arg) + { + msg_.temperature_ntc1 = std::move(arg); + return Init_LowState_temperature_ntc2(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_adc_reel +{ +public: + explicit Init_LowState_adc_reel(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_temperature_ntc1 adc_reel(::unitree_go::msg::LowState::_adc_reel_type arg) + { + msg_.adc_reel = std::move(arg); + return Init_LowState_temperature_ntc1(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_bit_flag +{ +public: + explicit Init_LowState_bit_flag(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_adc_reel bit_flag(::unitree_go::msg::LowState::_bit_flag_type arg) + { + msg_.bit_flag = std::move(arg); + return Init_LowState_adc_reel(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_wireless_remote +{ +public: + explicit Init_LowState_wireless_remote(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_bit_flag wireless_remote(::unitree_go::msg::LowState::_wireless_remote_type arg) + { + msg_.wireless_remote = std::move(arg); + return Init_LowState_bit_flag(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_tick +{ +public: + explicit Init_LowState_tick(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_wireless_remote tick(::unitree_go::msg::LowState::_tick_type arg) + { + msg_.tick = std::move(arg); + return Init_LowState_wireless_remote(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_foot_force_est +{ +public: + explicit Init_LowState_foot_force_est(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_tick foot_force_est(::unitree_go::msg::LowState::_foot_force_est_type arg) + { + msg_.foot_force_est = std::move(arg); + return Init_LowState_tick(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_foot_force +{ +public: + explicit Init_LowState_foot_force(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_foot_force_est foot_force(::unitree_go::msg::LowState::_foot_force_type arg) + { + msg_.foot_force = std::move(arg); + return Init_LowState_foot_force_est(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_bms_state +{ +public: + explicit Init_LowState_bms_state(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_foot_force bms_state(::unitree_go::msg::LowState::_bms_state_type arg) + { + msg_.bms_state = std::move(arg); + return Init_LowState_foot_force(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_motor_state +{ +public: + explicit Init_LowState_motor_state(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_bms_state motor_state(::unitree_go::msg::LowState::_motor_state_type arg) + { + msg_.motor_state = std::move(arg); + return Init_LowState_bms_state(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_imu_state +{ +public: + explicit Init_LowState_imu_state(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_motor_state imu_state(::unitree_go::msg::LowState::_imu_state_type arg) + { + msg_.imu_state = std::move(arg); + return Init_LowState_motor_state(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_bandwidth +{ +public: + explicit Init_LowState_bandwidth(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_imu_state bandwidth(::unitree_go::msg::LowState::_bandwidth_type arg) + { + msg_.bandwidth = std::move(arg); + return Init_LowState_imu_state(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_version +{ +public: + explicit Init_LowState_version(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_bandwidth version(::unitree_go::msg::LowState::_version_type arg) + { + msg_.version = std::move(arg); + return Init_LowState_bandwidth(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_sn +{ +public: + explicit Init_LowState_sn(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_version sn(::unitree_go::msg::LowState::_sn_type arg) + { + msg_.sn = std::move(arg); + return Init_LowState_version(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_frame_reserve +{ +public: + explicit Init_LowState_frame_reserve(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_sn frame_reserve(::unitree_go::msg::LowState::_frame_reserve_type arg) + { + msg_.frame_reserve = std::move(arg); + return Init_LowState_sn(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_level_flag +{ +public: + explicit Init_LowState_level_flag(::unitree_go::msg::LowState & msg) + : msg_(msg) + {} + Init_LowState_frame_reserve level_flag(::unitree_go::msg::LowState::_level_flag_type arg) + { + msg_.level_flag = std::move(arg); + return Init_LowState_frame_reserve(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +class Init_LowState_head +{ +public: + Init_LowState_head() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_LowState_level_flag head(::unitree_go::msg::LowState::_head_type arg) + { + msg_.head = std::move(arg); + return Init_LowState_level_flag(msg_); + } + +private: + ::unitree_go::msg::LowState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::LowState>() +{ + return unitree_go::msg::builder::Init_LowState_head(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.c new file mode 100644 index 0000000..2a1acd1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.c @@ -0,0 +1,476 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/low_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `imu_state` +#include "unitree_go/msg/detail/imu_state__functions.h" +// Member `motor_state` +#include "unitree_go/msg/detail/motor_state__functions.h" +// Member `bms_state` +#include "unitree_go/msg/detail/bms_state__functions.h" + +bool +unitree_go__msg__LowState__init(unitree_go__msg__LowState * msg) +{ + if (!msg) { + return false; + } + // head + // level_flag + // frame_reserve + // sn + // version + // bandwidth + // imu_state + if (!unitree_go__msg__IMUState__init(&msg->imu_state)) { + unitree_go__msg__LowState__fini(msg); + return false; + } + // motor_state + for (size_t i = 0; i < 20; ++i) { + if (!unitree_go__msg__MotorState__init(&msg->motor_state[i])) { + unitree_go__msg__LowState__fini(msg); + return false; + } + } + // bms_state + if (!unitree_go__msg__BmsState__init(&msg->bms_state)) { + unitree_go__msg__LowState__fini(msg); + return false; + } + // foot_force + // foot_force_est + // tick + // wireless_remote + // bit_flag + // adc_reel + // temperature_ntc1 + // temperature_ntc2 + // power_v + // power_a + // fan_frequency + // reserve + // crc + return true; +} + +void +unitree_go__msg__LowState__fini(unitree_go__msg__LowState * msg) +{ + if (!msg) { + return; + } + // head + // level_flag + // frame_reserve + // sn + // version + // bandwidth + // imu_state + unitree_go__msg__IMUState__fini(&msg->imu_state); + // motor_state + for (size_t i = 0; i < 20; ++i) { + unitree_go__msg__MotorState__fini(&msg->motor_state[i]); + } + // bms_state + unitree_go__msg__BmsState__fini(&msg->bms_state); + // foot_force + // foot_force_est + // tick + // wireless_remote + // bit_flag + // adc_reel + // temperature_ntc1 + // temperature_ntc2 + // power_v + // power_a + // fan_frequency + // reserve + // crc +} + +bool +unitree_go__msg__LowState__are_equal(const unitree_go__msg__LowState * lhs, const unitree_go__msg__LowState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // head + for (size_t i = 0; i < 2; ++i) { + if (lhs->head[i] != rhs->head[i]) { + return false; + } + } + // level_flag + if (lhs->level_flag != rhs->level_flag) { + return false; + } + // frame_reserve + if (lhs->frame_reserve != rhs->frame_reserve) { + return false; + } + // sn + for (size_t i = 0; i < 2; ++i) { + if (lhs->sn[i] != rhs->sn[i]) { + return false; + } + } + // version + for (size_t i = 0; i < 2; ++i) { + if (lhs->version[i] != rhs->version[i]) { + return false; + } + } + // bandwidth + if (lhs->bandwidth != rhs->bandwidth) { + return false; + } + // imu_state + if (!unitree_go__msg__IMUState__are_equal( + &(lhs->imu_state), &(rhs->imu_state))) + { + return false; + } + // motor_state + for (size_t i = 0; i < 20; ++i) { + if (!unitree_go__msg__MotorState__are_equal( + &(lhs->motor_state[i]), &(rhs->motor_state[i]))) + { + return false; + } + } + // bms_state + if (!unitree_go__msg__BmsState__are_equal( + &(lhs->bms_state), &(rhs->bms_state))) + { + return false; + } + // foot_force + for (size_t i = 0; i < 4; ++i) { + if (lhs->foot_force[i] != rhs->foot_force[i]) { + return false; + } + } + // foot_force_est + for (size_t i = 0; i < 4; ++i) { + if (lhs->foot_force_est[i] != rhs->foot_force_est[i]) { + return false; + } + } + // tick + if (lhs->tick != rhs->tick) { + return false; + } + // wireless_remote + for (size_t i = 0; i < 40; ++i) { + if (lhs->wireless_remote[i] != rhs->wireless_remote[i]) { + return false; + } + } + // bit_flag + if (lhs->bit_flag != rhs->bit_flag) { + return false; + } + // adc_reel + if (lhs->adc_reel != rhs->adc_reel) { + return false; + } + // temperature_ntc1 + if (lhs->temperature_ntc1 != rhs->temperature_ntc1) { + return false; + } + // temperature_ntc2 + if (lhs->temperature_ntc2 != rhs->temperature_ntc2) { + return false; + } + // power_v + if (lhs->power_v != rhs->power_v) { + return false; + } + // power_a + if (lhs->power_a != rhs->power_a) { + return false; + } + // fan_frequency + for (size_t i = 0; i < 4; ++i) { + if (lhs->fan_frequency[i] != rhs->fan_frequency[i]) { + return false; + } + } + // reserve + if (lhs->reserve != rhs->reserve) { + return false; + } + // crc + if (lhs->crc != rhs->crc) { + return false; + } + return true; +} + +bool +unitree_go__msg__LowState__copy( + const unitree_go__msg__LowState * input, + unitree_go__msg__LowState * output) +{ + if (!input || !output) { + return false; + } + // head + for (size_t i = 0; i < 2; ++i) { + output->head[i] = input->head[i]; + } + // level_flag + output->level_flag = input->level_flag; + // frame_reserve + output->frame_reserve = input->frame_reserve; + // sn + for (size_t i = 0; i < 2; ++i) { + output->sn[i] = input->sn[i]; + } + // version + for (size_t i = 0; i < 2; ++i) { + output->version[i] = input->version[i]; + } + // bandwidth + output->bandwidth = input->bandwidth; + // imu_state + if (!unitree_go__msg__IMUState__copy( + &(input->imu_state), &(output->imu_state))) + { + return false; + } + // motor_state + for (size_t i = 0; i < 20; ++i) { + if (!unitree_go__msg__MotorState__copy( + &(input->motor_state[i]), &(output->motor_state[i]))) + { + return false; + } + } + // bms_state + if (!unitree_go__msg__BmsState__copy( + &(input->bms_state), &(output->bms_state))) + { + return false; + } + // foot_force + for (size_t i = 0; i < 4; ++i) { + output->foot_force[i] = input->foot_force[i]; + } + // foot_force_est + for (size_t i = 0; i < 4; ++i) { + output->foot_force_est[i] = input->foot_force_est[i]; + } + // tick + output->tick = input->tick; + // wireless_remote + for (size_t i = 0; i < 40; ++i) { + output->wireless_remote[i] = input->wireless_remote[i]; + } + // bit_flag + output->bit_flag = input->bit_flag; + // adc_reel + output->adc_reel = input->adc_reel; + // temperature_ntc1 + output->temperature_ntc1 = input->temperature_ntc1; + // temperature_ntc2 + output->temperature_ntc2 = input->temperature_ntc2; + // power_v + output->power_v = input->power_v; + // power_a + output->power_a = input->power_a; + // fan_frequency + for (size_t i = 0; i < 4; ++i) { + output->fan_frequency[i] = input->fan_frequency[i]; + } + // reserve + output->reserve = input->reserve; + // crc + output->crc = input->crc; + return true; +} + +unitree_go__msg__LowState * +unitree_go__msg__LowState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LowState * msg = (unitree_go__msg__LowState *)allocator.allocate(sizeof(unitree_go__msg__LowState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__LowState)); + bool success = unitree_go__msg__LowState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__LowState__destroy(unitree_go__msg__LowState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__LowState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__LowState__Sequence__init(unitree_go__msg__LowState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LowState * data = NULL; + + if (size) { + data = (unitree_go__msg__LowState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__LowState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__LowState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__LowState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__LowState__Sequence__fini(unitree_go__msg__LowState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__LowState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__LowState__Sequence * +unitree_go__msg__LowState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__LowState__Sequence * array = (unitree_go__msg__LowState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__LowState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__LowState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__LowState__Sequence__destroy(unitree_go__msg__LowState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__LowState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__LowState__Sequence__are_equal(const unitree_go__msg__LowState__Sequence * lhs, const unitree_go__msg__LowState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__LowState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__LowState__Sequence__copy( + const unitree_go__msg__LowState__Sequence * input, + unitree_go__msg__LowState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__LowState); + unitree_go__msg__LowState * data = + (unitree_go__msg__LowState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__LowState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__LowState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__LowState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.h new file mode 100644 index 0000000..8f73c27 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/low_state__struct.h" + +/// Initialize msg/LowState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__LowState + * )) before or use + * unitree_go__msg__LowState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowState__init(unitree_go__msg__LowState * msg); + +/// Finalize msg/LowState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowState__fini(unitree_go__msg__LowState * msg); + +/// Create msg/LowState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__LowState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__LowState * +unitree_go__msg__LowState__create(); + +/// Destroy msg/LowState message. +/** + * It calls + * unitree_go__msg__LowState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowState__destroy(unitree_go__msg__LowState * msg); + +/// Check for msg/LowState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowState__are_equal(const unitree_go__msg__LowState * lhs, const unitree_go__msg__LowState * rhs); + +/// Copy a msg/LowState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowState__copy( + const unitree_go__msg__LowState * input, + unitree_go__msg__LowState * output); + +/// Initialize array of msg/LowState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__LowState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowState__Sequence__init(unitree_go__msg__LowState__Sequence * array, size_t size); + +/// Finalize array of msg/LowState messages. +/** + * It calls + * unitree_go__msg__LowState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowState__Sequence__fini(unitree_go__msg__LowState__Sequence * array); + +/// Create array of msg/LowState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__LowState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__LowState__Sequence * +unitree_go__msg__LowState__Sequence__create(size_t size); + +/// Destroy array of msg/LowState messages. +/** + * It calls + * unitree_go__msg__LowState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__LowState__Sequence__destroy(unitree_go__msg__LowState__Sequence * array); + +/// Check for msg/LowState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowState__Sequence__are_equal(const unitree_go__msg__LowState__Sequence * lhs, const unitree_go__msg__LowState__Sequence * rhs); + +/// Copy an array of msg/LowState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__LowState__Sequence__copy( + const unitree_go__msg__LowState__Sequence * input, + unitree_go__msg__LowState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..c6e07b6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__LowState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__LowState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, LowState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..311b055 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/low_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::LowState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::LowState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::LowState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_LowState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, LowState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..9aeb2d0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, LowState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..c6c5d40 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, LowState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.h new file mode 100644 index 0000000..4300ff0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.h @@ -0,0 +1,69 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'imu_state' +#include "unitree_go/msg/detail/imu_state__struct.h" +// Member 'motor_state' +#include "unitree_go/msg/detail/motor_state__struct.h" +// Member 'bms_state' +#include "unitree_go/msg/detail/bms_state__struct.h" + +// Struct defined in msg/LowState in the package unitree_go. +typedef struct unitree_go__msg__LowState +{ + uint8_t head[2]; + uint8_t level_flag; + uint8_t frame_reserve; + uint32_t sn[2]; + uint32_t version[2]; + uint16_t bandwidth; + unitree_go__msg__IMUState imu_state; + unitree_go__msg__MotorState motor_state[20]; + unitree_go__msg__BmsState bms_state; + int16_t foot_force[4]; + int16_t foot_force_est[4]; + uint32_t tick; + uint8_t wireless_remote[40]; + uint8_t bit_flag; + float adc_reel; + int8_t temperature_ntc1; + int8_t temperature_ntc2; + float power_v; + float power_a; + uint16_t fan_frequency[4]; + uint32_t reserve; + uint32_t crc; +} unitree_go__msg__LowState; + +// Struct for a sequence of unitree_go__msg__LowState. +typedef struct unitree_go__msg__LowState__Sequence +{ + unitree_go__msg__LowState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__LowState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.hpp new file mode 100644 index 0000000..1168725 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__struct.hpp @@ -0,0 +1,439 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'imu_state' +#include "unitree_go/msg/detail/imu_state__struct.hpp" +// Member 'motor_state' +#include "unitree_go/msg/detail/motor_state__struct.hpp" +// Member 'bms_state' +#include "unitree_go/msg/detail/bms_state__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__LowState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__LowState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct LowState_ +{ + using Type = LowState_; + + explicit LowState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : imu_state(_init), + bms_state(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, uint8_t>(this->head.begin(), this->head.end(), 0); + this->level_flag = 0; + this->frame_reserve = 0; + std::fill::iterator, uint32_t>(this->sn.begin(), this->sn.end(), 0ul); + std::fill::iterator, uint32_t>(this->version.begin(), this->version.end(), 0ul); + this->bandwidth = 0; + this->motor_state.fill(unitree_go::msg::MotorState_{_init}); + std::fill::iterator, int16_t>(this->foot_force.begin(), this->foot_force.end(), 0); + std::fill::iterator, int16_t>(this->foot_force_est.begin(), this->foot_force_est.end(), 0); + this->tick = 0ul; + std::fill::iterator, uint8_t>(this->wireless_remote.begin(), this->wireless_remote.end(), 0); + this->bit_flag = 0; + this->adc_reel = 0.0f; + this->temperature_ntc1 = 0; + this->temperature_ntc2 = 0; + this->power_v = 0.0f; + this->power_a = 0.0f; + std::fill::iterator, uint16_t>(this->fan_frequency.begin(), this->fan_frequency.end(), 0); + this->reserve = 0ul; + this->crc = 0ul; + } + } + + explicit LowState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : head(_alloc), + sn(_alloc), + version(_alloc), + imu_state(_alloc, _init), + motor_state(_alloc), + bms_state(_alloc, _init), + foot_force(_alloc), + foot_force_est(_alloc), + wireless_remote(_alloc), + fan_frequency(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, uint8_t>(this->head.begin(), this->head.end(), 0); + this->level_flag = 0; + this->frame_reserve = 0; + std::fill::iterator, uint32_t>(this->sn.begin(), this->sn.end(), 0ul); + std::fill::iterator, uint32_t>(this->version.begin(), this->version.end(), 0ul); + this->bandwidth = 0; + this->motor_state.fill(unitree_go::msg::MotorState_{_alloc, _init}); + std::fill::iterator, int16_t>(this->foot_force.begin(), this->foot_force.end(), 0); + std::fill::iterator, int16_t>(this->foot_force_est.begin(), this->foot_force_est.end(), 0); + this->tick = 0ul; + std::fill::iterator, uint8_t>(this->wireless_remote.begin(), this->wireless_remote.end(), 0); + this->bit_flag = 0; + this->adc_reel = 0.0f; + this->temperature_ntc1 = 0; + this->temperature_ntc2 = 0; + this->power_v = 0.0f; + this->power_a = 0.0f; + std::fill::iterator, uint16_t>(this->fan_frequency.begin(), this->fan_frequency.end(), 0); + this->reserve = 0ul; + this->crc = 0ul; + } + } + + // field types and members + using _head_type = + std::array; + _head_type head; + using _level_flag_type = + uint8_t; + _level_flag_type level_flag; + using _frame_reserve_type = + uint8_t; + _frame_reserve_type frame_reserve; + using _sn_type = + std::array; + _sn_type sn; + using _version_type = + std::array; + _version_type version; + using _bandwidth_type = + uint16_t; + _bandwidth_type bandwidth; + using _imu_state_type = + unitree_go::msg::IMUState_; + _imu_state_type imu_state; + using _motor_state_type = + std::array, 20>; + _motor_state_type motor_state; + using _bms_state_type = + unitree_go::msg::BmsState_; + _bms_state_type bms_state; + using _foot_force_type = + std::array; + _foot_force_type foot_force; + using _foot_force_est_type = + std::array; + _foot_force_est_type foot_force_est; + using _tick_type = + uint32_t; + _tick_type tick; + using _wireless_remote_type = + std::array; + _wireless_remote_type wireless_remote; + using _bit_flag_type = + uint8_t; + _bit_flag_type bit_flag; + using _adc_reel_type = + float; + _adc_reel_type adc_reel; + using _temperature_ntc1_type = + int8_t; + _temperature_ntc1_type temperature_ntc1; + using _temperature_ntc2_type = + int8_t; + _temperature_ntc2_type temperature_ntc2; + using _power_v_type = + float; + _power_v_type power_v; + using _power_a_type = + float; + _power_a_type power_a; + using _fan_frequency_type = + std::array; + _fan_frequency_type fan_frequency; + using _reserve_type = + uint32_t; + _reserve_type reserve; + using _crc_type = + uint32_t; + _crc_type crc; + + // setters for named parameter idiom + Type & set__head( + const std::array & _arg) + { + this->head = _arg; + return *this; + } + Type & set__level_flag( + const uint8_t & _arg) + { + this->level_flag = _arg; + return *this; + } + Type & set__frame_reserve( + const uint8_t & _arg) + { + this->frame_reserve = _arg; + return *this; + } + Type & set__sn( + const std::array & _arg) + { + this->sn = _arg; + return *this; + } + Type & set__version( + const std::array & _arg) + { + this->version = _arg; + return *this; + } + Type & set__bandwidth( + const uint16_t & _arg) + { + this->bandwidth = _arg; + return *this; + } + Type & set__imu_state( + const unitree_go::msg::IMUState_ & _arg) + { + this->imu_state = _arg; + return *this; + } + Type & set__motor_state( + const std::array, 20> & _arg) + { + this->motor_state = _arg; + return *this; + } + Type & set__bms_state( + const unitree_go::msg::BmsState_ & _arg) + { + this->bms_state = _arg; + return *this; + } + Type & set__foot_force( + const std::array & _arg) + { + this->foot_force = _arg; + return *this; + } + Type & set__foot_force_est( + const std::array & _arg) + { + this->foot_force_est = _arg; + return *this; + } + Type & set__tick( + const uint32_t & _arg) + { + this->tick = _arg; + return *this; + } + Type & set__wireless_remote( + const std::array & _arg) + { + this->wireless_remote = _arg; + return *this; + } + Type & set__bit_flag( + const uint8_t & _arg) + { + this->bit_flag = _arg; + return *this; + } + Type & set__adc_reel( + const float & _arg) + { + this->adc_reel = _arg; + return *this; + } + Type & set__temperature_ntc1( + const int8_t & _arg) + { + this->temperature_ntc1 = _arg; + return *this; + } + Type & set__temperature_ntc2( + const int8_t & _arg) + { + this->temperature_ntc2 = _arg; + return *this; + } + Type & set__power_v( + const float & _arg) + { + this->power_v = _arg; + return *this; + } + Type & set__power_a( + const float & _arg) + { + this->power_a = _arg; + return *this; + } + Type & set__fan_frequency( + const std::array & _arg) + { + this->fan_frequency = _arg; + return *this; + } + Type & set__reserve( + const uint32_t & _arg) + { + this->reserve = _arg; + return *this; + } + Type & set__crc( + const uint32_t & _arg) + { + this->crc = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::LowState_ *; + using ConstRawPtr = + const unitree_go::msg::LowState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__LowState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__LowState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const LowState_ & other) const + { + if (this->head != other.head) { + return false; + } + if (this->level_flag != other.level_flag) { + return false; + } + if (this->frame_reserve != other.frame_reserve) { + return false; + } + if (this->sn != other.sn) { + return false; + } + if (this->version != other.version) { + return false; + } + if (this->bandwidth != other.bandwidth) { + return false; + } + if (this->imu_state != other.imu_state) { + return false; + } + if (this->motor_state != other.motor_state) { + return false; + } + if (this->bms_state != other.bms_state) { + return false; + } + if (this->foot_force != other.foot_force) { + return false; + } + if (this->foot_force_est != other.foot_force_est) { + return false; + } + if (this->tick != other.tick) { + return false; + } + if (this->wireless_remote != other.wireless_remote) { + return false; + } + if (this->bit_flag != other.bit_flag) { + return false; + } + if (this->adc_reel != other.adc_reel) { + return false; + } + if (this->temperature_ntc1 != other.temperature_ntc1) { + return false; + } + if (this->temperature_ntc2 != other.temperature_ntc2) { + return false; + } + if (this->power_v != other.power_v) { + return false; + } + if (this->power_a != other.power_a) { + return false; + } + if (this->fan_frequency != other.fan_frequency) { + return false; + } + if (this->reserve != other.reserve) { + return false; + } + if (this->crc != other.crc) { + return false; + } + return true; + } + bool operator!=(const LowState_ & other) const + { + return !this->operator==(other); + } +}; // struct LowState_ + +// alias to use template instance with default allocator +using LowState = + unitree_go::msg::LowState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__traits.hpp new file mode 100644 index 0000000..1a80d34 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__traits.hpp @@ -0,0 +1,50 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/low_state__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'imu_state' +#include "unitree_go/msg/detail/imu_state__traits.hpp" +// Member 'motor_state' +#include "unitree_go/msg/detail/motor_state__traits.hpp" +// Member 'bms_state' +#include "unitree_go/msg/detail/bms_state__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::LowState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/LowState"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.c new file mode 100644 index 0000000..efa7f04 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.c @@ -0,0 +1,439 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/low_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/low_state__functions.h" +#include "unitree_go/msg/detail/low_state__struct.h" + + +// Include directives for member types +// Member `imu_state` +#include "unitree_go/msg/imu_state.h" +// Member `imu_state` +#include "unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h" +// Member `motor_state` +#include "unitree_go/msg/motor_state.h" +// Member `motor_state` +#include "unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_c.h" +// Member `bms_state` +#include "unitree_go/msg/bms_state.h" +// Member `bms_state` +#include "unitree_go/msg/detail/bms_state__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void LowState__rosidl_typesupport_introspection_c__LowState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__LowState__init(message_memory); +} + +void LowState__rosidl_typesupport_introspection_c__LowState_fini_function(void * message_memory) +{ + unitree_go__msg__LowState__fini(message_memory); +} + +size_t LowState__rosidl_typesupport_introspection_c__size_function__MotorState__motor_state( + const void * untyped_member) +{ + (void)untyped_member; + return 20; +} + +const void * LowState__rosidl_typesupport_introspection_c__get_const_function__MotorState__motor_state( + const void * untyped_member, size_t index) +{ + const unitree_go__msg__MotorState ** member = + (const unitree_go__msg__MotorState **)(untyped_member); + return &(*member)[index]; +} + +void * LowState__rosidl_typesupport_introspection_c__get_function__MotorState__motor_state( + void * untyped_member, size_t index) +{ + unitree_go__msg__MotorState ** member = + (unitree_go__msg__MotorState **)(untyped_member); + return &(*member)[index]; +} + +static rosidl_typesupport_introspection_c__MessageMember LowState__rosidl_typesupport_introspection_c__LowState_message_member_array[22] = { + { + "head", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, head), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "level_flag", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, level_flag), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "frame_reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, frame_reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "sn", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, sn), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "version", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, version), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bandwidth", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT16, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, bandwidth), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "imu_state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, imu_state), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "motor_state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + true, // is array + 20, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, motor_state), // bytes offset in struct + NULL, // default value + LowState__rosidl_typesupport_introspection_c__size_function__MotorState__motor_state, // size() function pointer + LowState__rosidl_typesupport_introspection_c__get_const_function__MotorState__motor_state, // get_const(index) function pointer + LowState__rosidl_typesupport_introspection_c__get_function__MotorState__motor_state, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bms_state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, bms_state), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_force", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT16, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, foot_force), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_force_est", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT16, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, foot_force_est), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "tick", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, tick), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "wireless_remote", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 40, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, wireless_remote), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bit_flag", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, bit_flag), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "adc_reel", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, adc_reel), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "temperature_ntc1", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, temperature_ntc1), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "temperature_ntc2", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, temperature_ntc2), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "power_v", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, power_v), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "power_a", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, power_a), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "fan_frequency", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT16, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, fan_frequency), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "crc", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__LowState, crc), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers LowState__rosidl_typesupport_introspection_c__LowState_message_members = { + "unitree_go__msg", // message namespace + "LowState", // message name + 22, // number of fields + sizeof(unitree_go__msg__LowState), + LowState__rosidl_typesupport_introspection_c__LowState_message_member_array, // message members + LowState__rosidl_typesupport_introspection_c__LowState_init_function, // function to initialize message memory (memory has to be allocated) + LowState__rosidl_typesupport_introspection_c__LowState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t LowState__rosidl_typesupport_introspection_c__LowState_message_type_support_handle = { + 0, + &LowState__rosidl_typesupport_introspection_c__LowState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, LowState)() { + LowState__rosidl_typesupport_introspection_c__LowState_message_member_array[6].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, IMUState)(); + LowState__rosidl_typesupport_introspection_c__LowState_message_member_array[7].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, MotorState)(); + LowState__rosidl_typesupport_introspection_c__LowState_message_member_array[8].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsState)(); + if (!LowState__rosidl_typesupport_introspection_c__LowState_message_type_support_handle.typesupport_identifier) { + LowState__rosidl_typesupport_introspection_c__LowState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &LowState__rosidl_typesupport_introspection_c__LowState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.cpp new file mode 100644 index 0000000..f7c2ef1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.cpp @@ -0,0 +1,582 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/low_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void LowState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::LowState(_init); +} + +void LowState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~LowState(); +} + +size_t size_function__LowState__head(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowState__head(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__head(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__sn(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowState__sn(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__sn(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__version(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__LowState__version(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__version(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__motor_state(const void * untyped_member) +{ + (void)untyped_member; + return 20; +} + +const void * get_const_function__LowState__motor_state(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__motor_state(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__foot_force(const void * untyped_member) +{ + (void)untyped_member; + return 4; +} + +const void * get_const_function__LowState__foot_force(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__foot_force(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__foot_force_est(const void * untyped_member) +{ + (void)untyped_member; + return 4; +} + +const void * get_const_function__LowState__foot_force_est(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__foot_force_est(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__wireless_remote(const void * untyped_member) +{ + (void)untyped_member; + return 40; +} + +const void * get_const_function__LowState__wireless_remote(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__wireless_remote(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__LowState__fan_frequency(const void * untyped_member) +{ + (void)untyped_member; + return 4; +} + +const void * get_const_function__LowState__fan_frequency(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__LowState__fan_frequency(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember LowState_message_member_array[22] = { + { + "head", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, head), // bytes offset in struct + nullptr, // default value + size_function__LowState__head, // size() function pointer + get_const_function__LowState__head, // get_const(index) function pointer + get_function__LowState__head, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "level_flag", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, level_flag), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "frame_reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, frame_reserve), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "sn", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, sn), // bytes offset in struct + nullptr, // default value + size_function__LowState__sn, // size() function pointer + get_const_function__LowState__sn, // get_const(index) function pointer + get_function__LowState__sn, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "version", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, version), // bytes offset in struct + nullptr, // default value + size_function__LowState__version, // size() function pointer + get_const_function__LowState__version, // get_const(index) function pointer + get_function__LowState__version, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bandwidth", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT16, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, bandwidth), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "imu_state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, imu_state), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "motor_state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + true, // is array + 20, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, motor_state), // bytes offset in struct + nullptr, // default value + size_function__LowState__motor_state, // size() function pointer + get_const_function__LowState__motor_state, // get_const(index) function pointer + get_function__LowState__motor_state, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bms_state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, bms_state), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_force", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT16, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, foot_force), // bytes offset in struct + nullptr, // default value + size_function__LowState__foot_force, // size() function pointer + get_const_function__LowState__foot_force, // get_const(index) function pointer + get_function__LowState__foot_force, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_force_est", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT16, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, foot_force_est), // bytes offset in struct + nullptr, // default value + size_function__LowState__foot_force_est, // size() function pointer + get_const_function__LowState__foot_force_est, // get_const(index) function pointer + get_function__LowState__foot_force_est, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "tick", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, tick), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "wireless_remote", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 40, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, wireless_remote), // bytes offset in struct + nullptr, // default value + size_function__LowState__wireless_remote, // size() function pointer + get_const_function__LowState__wireless_remote, // get_const(index) function pointer + get_function__LowState__wireless_remote, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bit_flag", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, bit_flag), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "adc_reel", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, adc_reel), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "temperature_ntc1", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, temperature_ntc1), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "temperature_ntc2", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, temperature_ntc2), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "power_v", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, power_v), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "power_a", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, power_a), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "fan_frequency", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT16, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, fan_frequency), // bytes offset in struct + nullptr, // default value + size_function__LowState__fan_frequency, // size() function pointer + get_const_function__LowState__fan_frequency, // get_const(index) function pointer + get_function__LowState__fan_frequency, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, reserve), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "crc", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::LowState, crc), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers LowState_message_members = { + "unitree_go::msg", // message namespace + "LowState", // message name + 22, // number of fields + sizeof(unitree_go::msg::LowState), + LowState_message_member_array, // message members + LowState_init_function, // function to initialize message memory (memory has to be allocated) + LowState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t LowState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &LowState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::LowState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, LowState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::LowState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.h new file mode 100644 index 0000000..7a261b9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + LowState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.hpp new file mode 100644 index 0000000..28235cf --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/low_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__LOW_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__LOW_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + LowState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__LOW_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__builder.hpp new file mode 100644 index 0000000..964d0bb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__builder.hpp @@ -0,0 +1,151 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__BUILDER_HPP_ + +#include "unitree_go/msg/detail/motor_cmd__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_MotorCmd_reserve +{ +public: + explicit Init_MotorCmd_reserve(::unitree_go::msg::MotorCmd & msg) + : msg_(msg) + {} + ::unitree_go::msg::MotorCmd reserve(::unitree_go::msg::MotorCmd::_reserve_type arg) + { + msg_.reserve = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +class Init_MotorCmd_kd +{ +public: + explicit Init_MotorCmd_kd(::unitree_go::msg::MotorCmd & msg) + : msg_(msg) + {} + Init_MotorCmd_reserve kd(::unitree_go::msg::MotorCmd::_kd_type arg) + { + msg_.kd = std::move(arg); + return Init_MotorCmd_reserve(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +class Init_MotorCmd_kp +{ +public: + explicit Init_MotorCmd_kp(::unitree_go::msg::MotorCmd & msg) + : msg_(msg) + {} + Init_MotorCmd_kd kp(::unitree_go::msg::MotorCmd::_kp_type arg) + { + msg_.kp = std::move(arg); + return Init_MotorCmd_kd(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +class Init_MotorCmd_tau +{ +public: + explicit Init_MotorCmd_tau(::unitree_go::msg::MotorCmd & msg) + : msg_(msg) + {} + Init_MotorCmd_kp tau(::unitree_go::msg::MotorCmd::_tau_type arg) + { + msg_.tau = std::move(arg); + return Init_MotorCmd_kp(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +class Init_MotorCmd_dq +{ +public: + explicit Init_MotorCmd_dq(::unitree_go::msg::MotorCmd & msg) + : msg_(msg) + {} + Init_MotorCmd_tau dq(::unitree_go::msg::MotorCmd::_dq_type arg) + { + msg_.dq = std::move(arg); + return Init_MotorCmd_tau(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +class Init_MotorCmd_q +{ +public: + explicit Init_MotorCmd_q(::unitree_go::msg::MotorCmd & msg) + : msg_(msg) + {} + Init_MotorCmd_dq q(::unitree_go::msg::MotorCmd::_q_type arg) + { + msg_.q = std::move(arg); + return Init_MotorCmd_dq(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +class Init_MotorCmd_mode +{ +public: + Init_MotorCmd_mode() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_MotorCmd_q mode(::unitree_go::msg::MotorCmd::_mode_type arg) + { + msg_.mode = std::move(arg); + return Init_MotorCmd_q(msg_); + } + +private: + ::unitree_go::msg::MotorCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::MotorCmd>() +{ + return unitree_go::msg::builder::Init_MotorCmd_mode(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.c new file mode 100644 index 0000000..e644e1e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.c @@ -0,0 +1,283 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/motor_cmd__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__MotorCmd__init(unitree_go__msg__MotorCmd * msg) +{ + if (!msg) { + return false; + } + // mode + // q + // dq + // tau + // kp + // kd + // reserve + return true; +} + +void +unitree_go__msg__MotorCmd__fini(unitree_go__msg__MotorCmd * msg) +{ + if (!msg) { + return; + } + // mode + // q + // dq + // tau + // kp + // kd + // reserve +} + +bool +unitree_go__msg__MotorCmd__are_equal(const unitree_go__msg__MotorCmd * lhs, const unitree_go__msg__MotorCmd * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // mode + if (lhs->mode != rhs->mode) { + return false; + } + // q + if (lhs->q != rhs->q) { + return false; + } + // dq + if (lhs->dq != rhs->dq) { + return false; + } + // tau + if (lhs->tau != rhs->tau) { + return false; + } + // kp + if (lhs->kp != rhs->kp) { + return false; + } + // kd + if (lhs->kd != rhs->kd) { + return false; + } + // reserve + for (size_t i = 0; i < 3; ++i) { + if (lhs->reserve[i] != rhs->reserve[i]) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__MotorCmd__copy( + const unitree_go__msg__MotorCmd * input, + unitree_go__msg__MotorCmd * output) +{ + if (!input || !output) { + return false; + } + // mode + output->mode = input->mode; + // q + output->q = input->q; + // dq + output->dq = input->dq; + // tau + output->tau = input->tau; + // kp + output->kp = input->kp; + // kd + output->kd = input->kd; + // reserve + for (size_t i = 0; i < 3; ++i) { + output->reserve[i] = input->reserve[i]; + } + return true; +} + +unitree_go__msg__MotorCmd * +unitree_go__msg__MotorCmd__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__MotorCmd * msg = (unitree_go__msg__MotorCmd *)allocator.allocate(sizeof(unitree_go__msg__MotorCmd), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__MotorCmd)); + bool success = unitree_go__msg__MotorCmd__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__MotorCmd__destroy(unitree_go__msg__MotorCmd * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__MotorCmd__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__MotorCmd__Sequence__init(unitree_go__msg__MotorCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__MotorCmd * data = NULL; + + if (size) { + data = (unitree_go__msg__MotorCmd *)allocator.zero_allocate(size, sizeof(unitree_go__msg__MotorCmd), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__MotorCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__MotorCmd__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__MotorCmd__Sequence__fini(unitree_go__msg__MotorCmd__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__MotorCmd__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__MotorCmd__Sequence * +unitree_go__msg__MotorCmd__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__MotorCmd__Sequence * array = (unitree_go__msg__MotorCmd__Sequence *)allocator.allocate(sizeof(unitree_go__msg__MotorCmd__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__MotorCmd__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__MotorCmd__Sequence__destroy(unitree_go__msg__MotorCmd__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__MotorCmd__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__MotorCmd__Sequence__are_equal(const unitree_go__msg__MotorCmd__Sequence * lhs, const unitree_go__msg__MotorCmd__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__MotorCmd__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__MotorCmd__Sequence__copy( + const unitree_go__msg__MotorCmd__Sequence * input, + unitree_go__msg__MotorCmd__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__MotorCmd); + unitree_go__msg__MotorCmd * data = + (unitree_go__msg__MotorCmd *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__MotorCmd__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__MotorCmd__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__MotorCmd__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.h new file mode 100644 index 0000000..a8876fb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/motor_cmd__struct.h" + +/// Initialize msg/MotorCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__MotorCmd + * )) before or use + * unitree_go__msg__MotorCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorCmd__init(unitree_go__msg__MotorCmd * msg); + +/// Finalize msg/MotorCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorCmd__fini(unitree_go__msg__MotorCmd * msg); + +/// Create msg/MotorCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__MotorCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__MotorCmd * +unitree_go__msg__MotorCmd__create(); + +/// Destroy msg/MotorCmd message. +/** + * It calls + * unitree_go__msg__MotorCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorCmd__destroy(unitree_go__msg__MotorCmd * msg); + +/// Check for msg/MotorCmd message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorCmd__are_equal(const unitree_go__msg__MotorCmd * lhs, const unitree_go__msg__MotorCmd * rhs); + +/// Copy a msg/MotorCmd message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorCmd__copy( + const unitree_go__msg__MotorCmd * input, + unitree_go__msg__MotorCmd * output); + +/// Initialize array of msg/MotorCmd messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__MotorCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorCmd__Sequence__init(unitree_go__msg__MotorCmd__Sequence * array, size_t size); + +/// Finalize array of msg/MotorCmd messages. +/** + * It calls + * unitree_go__msg__MotorCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorCmd__Sequence__fini(unitree_go__msg__MotorCmd__Sequence * array); + +/// Create array of msg/MotorCmd messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__MotorCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__MotorCmd__Sequence * +unitree_go__msg__MotorCmd__Sequence__create(size_t size); + +/// Destroy array of msg/MotorCmd messages. +/** + * It calls + * unitree_go__msg__MotorCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorCmd__Sequence__destroy(unitree_go__msg__MotorCmd__Sequence * array); + +/// Check for msg/MotorCmd message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorCmd__Sequence__are_equal(const unitree_go__msg__MotorCmd__Sequence * lhs, const unitree_go__msg__MotorCmd__Sequence * rhs); + +/// Copy an array of msg/MotorCmd messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorCmd__Sequence__copy( + const unitree_go__msg__MotorCmd__Sequence * input, + unitree_go__msg__MotorCmd__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..b57aab6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__MotorCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__MotorCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, MotorCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..a29343c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/motor_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::MotorCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::MotorCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::MotorCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_MotorCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, MotorCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..b0ab8a8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, MotorCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..7c49286 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, MotorCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.h new file mode 100644 index 0000000..08580f3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.h @@ -0,0 +1,46 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/MotorCmd in the package unitree_go. +typedef struct unitree_go__msg__MotorCmd +{ + uint8_t mode; + float q; + float dq; + float tau; + float kp; + float kd; + uint32_t reserve[3]; +} unitree_go__msg__MotorCmd; + +// Struct for a sequence of unitree_go__msg__MotorCmd. +typedef struct unitree_go__msg__MotorCmd__Sequence +{ + unitree_go__msg__MotorCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__MotorCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.hpp new file mode 100644 index 0000000..987eb7a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__struct.hpp @@ -0,0 +1,214 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__MotorCmd __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__MotorCmd __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct MotorCmd_ +{ + using Type = MotorCmd_; + + explicit MotorCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->q = 0.0f; + this->dq = 0.0f; + this->tau = 0.0f; + this->kp = 0.0f; + this->kd = 0.0f; + std::fill::iterator, uint32_t>(this->reserve.begin(), this->reserve.end(), 0ul); + } + } + + explicit MotorCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : reserve(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->q = 0.0f; + this->dq = 0.0f; + this->tau = 0.0f; + this->kp = 0.0f; + this->kd = 0.0f; + std::fill::iterator, uint32_t>(this->reserve.begin(), this->reserve.end(), 0ul); + } + } + + // field types and members + using _mode_type = + uint8_t; + _mode_type mode; + using _q_type = + float; + _q_type q; + using _dq_type = + float; + _dq_type dq; + using _tau_type = + float; + _tau_type tau; + using _kp_type = + float; + _kp_type kp; + using _kd_type = + float; + _kd_type kd; + using _reserve_type = + std::array; + _reserve_type reserve; + + // setters for named parameter idiom + Type & set__mode( + const uint8_t & _arg) + { + this->mode = _arg; + return *this; + } + Type & set__q( + const float & _arg) + { + this->q = _arg; + return *this; + } + Type & set__dq( + const float & _arg) + { + this->dq = _arg; + return *this; + } + Type & set__tau( + const float & _arg) + { + this->tau = _arg; + return *this; + } + Type & set__kp( + const float & _arg) + { + this->kp = _arg; + return *this; + } + Type & set__kd( + const float & _arg) + { + this->kd = _arg; + return *this; + } + Type & set__reserve( + const std::array & _arg) + { + this->reserve = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::MotorCmd_ *; + using ConstRawPtr = + const unitree_go::msg::MotorCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__MotorCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__MotorCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const MotorCmd_ & other) const + { + if (this->mode != other.mode) { + return false; + } + if (this->q != other.q) { + return false; + } + if (this->dq != other.dq) { + return false; + } + if (this->tau != other.tau) { + return false; + } + if (this->kp != other.kp) { + return false; + } + if (this->kd != other.kd) { + return false; + } + if (this->reserve != other.reserve) { + return false; + } + return true; + } + bool operator!=(const MotorCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct MotorCmd_ + +// alias to use template instance with default allocator +using MotorCmd = + unitree_go::msg::MotorCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__traits.hpp new file mode 100644 index 0000000..c1ea718 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TRAITS_HPP_ + +#include "unitree_go/msg/detail/motor_cmd__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::MotorCmd"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/MotorCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.c new file mode 100644 index 0000000..7a7b7b6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.c @@ -0,0 +1,171 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/motor_cmd__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/motor_cmd__functions.h" +#include "unitree_go/msg/detail/motor_cmd__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__MotorCmd__init(message_memory); +} + +void MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_fini_function(void * message_memory) +{ + unitree_go__msg__MotorCmd__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_member_array[7] = { + { + "mode", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, mode), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "q", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, q), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "dq", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, dq), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "tau", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, tau), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "kp", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, kp), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "kd", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, kd), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorCmd, reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_members = { + "unitree_go__msg", // message namespace + "MotorCmd", // message name + 7, // number of fields + sizeof(unitree_go__msg__MotorCmd), + MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_member_array, // message members + MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_init_function, // function to initialize message memory (memory has to be allocated) + MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_type_support_handle = { + 0, + &MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, MotorCmd)() { + if (!MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_type_support_handle.typesupport_identifier) { + MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &MotorCmd__rosidl_typesupport_introspection_c__MotorCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.cpp new file mode 100644 index 0000000..acbca4f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.cpp @@ -0,0 +1,217 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/motor_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void MotorCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::MotorCmd(_init); +} + +void MotorCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~MotorCmd(); +} + +size_t size_function__MotorCmd__reserve(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__MotorCmd__reserve(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__MotorCmd__reserve(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember MotorCmd_message_member_array[7] = { + { + "mode", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, mode), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "q", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, q), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "dq", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, dq), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "tau", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, tau), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "kp", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, kp), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "kd", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, kd), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorCmd, reserve), // bytes offset in struct + nullptr, // default value + size_function__MotorCmd__reserve, // size() function pointer + get_const_function__MotorCmd__reserve, // get_const(index) function pointer + get_function__MotorCmd__reserve, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers MotorCmd_message_members = { + "unitree_go::msg", // message namespace + "MotorCmd", // message name + 7, // number of fields + sizeof(unitree_go::msg::MotorCmd), + MotorCmd_message_member_array, // message members + MotorCmd_init_function, // function to initialize message memory (memory has to be allocated) + MotorCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t MotorCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &MotorCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::MotorCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, MotorCmd)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::MotorCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.h new file mode 100644 index 0000000..3592b44 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + MotorCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.hpp new file mode 100644 index 0000000..f5a4dd5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_cmd__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + MotorCmd +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_CMD__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__builder.hpp new file mode 100644 index 0000000..bf44597 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__builder.hpp @@ -0,0 +1,215 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/motor_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_MotorState_reserve +{ +public: + explicit Init_MotorState_reserve(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + ::unitree_go::msg::MotorState reserve(::unitree_go::msg::MotorState::_reserve_type arg) + { + msg_.reserve = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_lost +{ +public: + explicit Init_MotorState_lost(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_reserve lost(::unitree_go::msg::MotorState::_lost_type arg) + { + msg_.lost = std::move(arg); + return Init_MotorState_reserve(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_temperature +{ +public: + explicit Init_MotorState_temperature(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_lost temperature(::unitree_go::msg::MotorState::_temperature_type arg) + { + msg_.temperature = std::move(arg); + return Init_MotorState_lost(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_ddq_raw +{ +public: + explicit Init_MotorState_ddq_raw(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_temperature ddq_raw(::unitree_go::msg::MotorState::_ddq_raw_type arg) + { + msg_.ddq_raw = std::move(arg); + return Init_MotorState_temperature(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_dq_raw +{ +public: + explicit Init_MotorState_dq_raw(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_ddq_raw dq_raw(::unitree_go::msg::MotorState::_dq_raw_type arg) + { + msg_.dq_raw = std::move(arg); + return Init_MotorState_ddq_raw(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_q_raw +{ +public: + explicit Init_MotorState_q_raw(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_dq_raw q_raw(::unitree_go::msg::MotorState::_q_raw_type arg) + { + msg_.q_raw = std::move(arg); + return Init_MotorState_dq_raw(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_tau_est +{ +public: + explicit Init_MotorState_tau_est(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_q_raw tau_est(::unitree_go::msg::MotorState::_tau_est_type arg) + { + msg_.tau_est = std::move(arg); + return Init_MotorState_q_raw(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_ddq +{ +public: + explicit Init_MotorState_ddq(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_tau_est ddq(::unitree_go::msg::MotorState::_ddq_type arg) + { + msg_.ddq = std::move(arg); + return Init_MotorState_tau_est(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_dq +{ +public: + explicit Init_MotorState_dq(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_ddq dq(::unitree_go::msg::MotorState::_dq_type arg) + { + msg_.dq = std::move(arg); + return Init_MotorState_ddq(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_q +{ +public: + explicit Init_MotorState_q(::unitree_go::msg::MotorState & msg) + : msg_(msg) + {} + Init_MotorState_dq q(::unitree_go::msg::MotorState::_q_type arg) + { + msg_.q = std::move(arg); + return Init_MotorState_dq(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +class Init_MotorState_mode +{ +public: + Init_MotorState_mode() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_MotorState_q mode(::unitree_go::msg::MotorState::_mode_type arg) + { + msg_.mode = std::move(arg); + return Init_MotorState_q(msg_); + } + +private: + ::unitree_go::msg::MotorState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::MotorState>() +{ + return unitree_go::msg::builder::Init_MotorState_mode(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.c new file mode 100644 index 0000000..ff2301e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.c @@ -0,0 +1,315 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/motor_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__MotorState__init(unitree_go__msg__MotorState * msg) +{ + if (!msg) { + return false; + } + // mode + // q + // dq + // ddq + // tau_est + // q_raw + // dq_raw + // ddq_raw + // temperature + // lost + // reserve + return true; +} + +void +unitree_go__msg__MotorState__fini(unitree_go__msg__MotorState * msg) +{ + if (!msg) { + return; + } + // mode + // q + // dq + // ddq + // tau_est + // q_raw + // dq_raw + // ddq_raw + // temperature + // lost + // reserve +} + +bool +unitree_go__msg__MotorState__are_equal(const unitree_go__msg__MotorState * lhs, const unitree_go__msg__MotorState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // mode + if (lhs->mode != rhs->mode) { + return false; + } + // q + if (lhs->q != rhs->q) { + return false; + } + // dq + if (lhs->dq != rhs->dq) { + return false; + } + // ddq + if (lhs->ddq != rhs->ddq) { + return false; + } + // tau_est + if (lhs->tau_est != rhs->tau_est) { + return false; + } + // q_raw + if (lhs->q_raw != rhs->q_raw) { + return false; + } + // dq_raw + if (lhs->dq_raw != rhs->dq_raw) { + return false; + } + // ddq_raw + if (lhs->ddq_raw != rhs->ddq_raw) { + return false; + } + // temperature + if (lhs->temperature != rhs->temperature) { + return false; + } + // lost + if (lhs->lost != rhs->lost) { + return false; + } + // reserve + for (size_t i = 0; i < 2; ++i) { + if (lhs->reserve[i] != rhs->reserve[i]) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__MotorState__copy( + const unitree_go__msg__MotorState * input, + unitree_go__msg__MotorState * output) +{ + if (!input || !output) { + return false; + } + // mode + output->mode = input->mode; + // q + output->q = input->q; + // dq + output->dq = input->dq; + // ddq + output->ddq = input->ddq; + // tau_est + output->tau_est = input->tau_est; + // q_raw + output->q_raw = input->q_raw; + // dq_raw + output->dq_raw = input->dq_raw; + // ddq_raw + output->ddq_raw = input->ddq_raw; + // temperature + output->temperature = input->temperature; + // lost + output->lost = input->lost; + // reserve + for (size_t i = 0; i < 2; ++i) { + output->reserve[i] = input->reserve[i]; + } + return true; +} + +unitree_go__msg__MotorState * +unitree_go__msg__MotorState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__MotorState * msg = (unitree_go__msg__MotorState *)allocator.allocate(sizeof(unitree_go__msg__MotorState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__MotorState)); + bool success = unitree_go__msg__MotorState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__MotorState__destroy(unitree_go__msg__MotorState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__MotorState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__MotorState__Sequence__init(unitree_go__msg__MotorState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__MotorState * data = NULL; + + if (size) { + data = (unitree_go__msg__MotorState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__MotorState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__MotorState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__MotorState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__MotorState__Sequence__fini(unitree_go__msg__MotorState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__MotorState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__MotorState__Sequence * +unitree_go__msg__MotorState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__MotorState__Sequence * array = (unitree_go__msg__MotorState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__MotorState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__MotorState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__MotorState__Sequence__destroy(unitree_go__msg__MotorState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__MotorState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__MotorState__Sequence__are_equal(const unitree_go__msg__MotorState__Sequence * lhs, const unitree_go__msg__MotorState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__MotorState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__MotorState__Sequence__copy( + const unitree_go__msg__MotorState__Sequence * input, + unitree_go__msg__MotorState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__MotorState); + unitree_go__msg__MotorState * data = + (unitree_go__msg__MotorState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__MotorState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__MotorState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__MotorState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.h new file mode 100644 index 0000000..ed99679 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/motor_state__struct.h" + +/// Initialize msg/MotorState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__MotorState + * )) before or use + * unitree_go__msg__MotorState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorState__init(unitree_go__msg__MotorState * msg); + +/// Finalize msg/MotorState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorState__fini(unitree_go__msg__MotorState * msg); + +/// Create msg/MotorState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__MotorState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__MotorState * +unitree_go__msg__MotorState__create(); + +/// Destroy msg/MotorState message. +/** + * It calls + * unitree_go__msg__MotorState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorState__destroy(unitree_go__msg__MotorState * msg); + +/// Check for msg/MotorState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorState__are_equal(const unitree_go__msg__MotorState * lhs, const unitree_go__msg__MotorState * rhs); + +/// Copy a msg/MotorState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorState__copy( + const unitree_go__msg__MotorState * input, + unitree_go__msg__MotorState * output); + +/// Initialize array of msg/MotorState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__MotorState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorState__Sequence__init(unitree_go__msg__MotorState__Sequence * array, size_t size); + +/// Finalize array of msg/MotorState messages. +/** + * It calls + * unitree_go__msg__MotorState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorState__Sequence__fini(unitree_go__msg__MotorState__Sequence * array); + +/// Create array of msg/MotorState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__MotorState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__MotorState__Sequence * +unitree_go__msg__MotorState__Sequence__create(size_t size); + +/// Destroy array of msg/MotorState messages. +/** + * It calls + * unitree_go__msg__MotorState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__MotorState__Sequence__destroy(unitree_go__msg__MotorState__Sequence * array); + +/// Check for msg/MotorState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorState__Sequence__are_equal(const unitree_go__msg__MotorState__Sequence * lhs, const unitree_go__msg__MotorState__Sequence * rhs); + +/// Copy an array of msg/MotorState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__MotorState__Sequence__copy( + const unitree_go__msg__MotorState__Sequence * input, + unitree_go__msg__MotorState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..c3b4398 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__MotorState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__MotorState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, MotorState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..5698ffb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/motor_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::MotorState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::MotorState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::MotorState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_MotorState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, MotorState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..75a202a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, MotorState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..1213021 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, MotorState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.h new file mode 100644 index 0000000..c662d90 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.h @@ -0,0 +1,50 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/MotorState in the package unitree_go. +typedef struct unitree_go__msg__MotorState +{ + uint8_t mode; + float q; + float dq; + float ddq; + float tau_est; + float q_raw; + float dq_raw; + float ddq_raw; + int8_t temperature; + uint32_t lost; + uint32_t reserve[2]; +} unitree_go__msg__MotorState; + +// Struct for a sequence of unitree_go__msg__MotorState. +typedef struct unitree_go__msg__MotorState__Sequence +{ + unitree_go__msg__MotorState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__MotorState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.hpp new file mode 100644 index 0000000..5b3a0ad --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__struct.hpp @@ -0,0 +1,270 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__MotorState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__MotorState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct MotorState_ +{ + using Type = MotorState_; + + explicit MotorState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->q = 0.0f; + this->dq = 0.0f; + this->ddq = 0.0f; + this->tau_est = 0.0f; + this->q_raw = 0.0f; + this->dq_raw = 0.0f; + this->ddq_raw = 0.0f; + this->temperature = 0; + this->lost = 0ul; + std::fill::iterator, uint32_t>(this->reserve.begin(), this->reserve.end(), 0ul); + } + } + + explicit MotorState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : reserve(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->q = 0.0f; + this->dq = 0.0f; + this->ddq = 0.0f; + this->tau_est = 0.0f; + this->q_raw = 0.0f; + this->dq_raw = 0.0f; + this->ddq_raw = 0.0f; + this->temperature = 0; + this->lost = 0ul; + std::fill::iterator, uint32_t>(this->reserve.begin(), this->reserve.end(), 0ul); + } + } + + // field types and members + using _mode_type = + uint8_t; + _mode_type mode; + using _q_type = + float; + _q_type q; + using _dq_type = + float; + _dq_type dq; + using _ddq_type = + float; + _ddq_type ddq; + using _tau_est_type = + float; + _tau_est_type tau_est; + using _q_raw_type = + float; + _q_raw_type q_raw; + using _dq_raw_type = + float; + _dq_raw_type dq_raw; + using _ddq_raw_type = + float; + _ddq_raw_type ddq_raw; + using _temperature_type = + int8_t; + _temperature_type temperature; + using _lost_type = + uint32_t; + _lost_type lost; + using _reserve_type = + std::array; + _reserve_type reserve; + + // setters for named parameter idiom + Type & set__mode( + const uint8_t & _arg) + { + this->mode = _arg; + return *this; + } + Type & set__q( + const float & _arg) + { + this->q = _arg; + return *this; + } + Type & set__dq( + const float & _arg) + { + this->dq = _arg; + return *this; + } + Type & set__ddq( + const float & _arg) + { + this->ddq = _arg; + return *this; + } + Type & set__tau_est( + const float & _arg) + { + this->tau_est = _arg; + return *this; + } + Type & set__q_raw( + const float & _arg) + { + this->q_raw = _arg; + return *this; + } + Type & set__dq_raw( + const float & _arg) + { + this->dq_raw = _arg; + return *this; + } + Type & set__ddq_raw( + const float & _arg) + { + this->ddq_raw = _arg; + return *this; + } + Type & set__temperature( + const int8_t & _arg) + { + this->temperature = _arg; + return *this; + } + Type & set__lost( + const uint32_t & _arg) + { + this->lost = _arg; + return *this; + } + Type & set__reserve( + const std::array & _arg) + { + this->reserve = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::MotorState_ *; + using ConstRawPtr = + const unitree_go::msg::MotorState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__MotorState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__MotorState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const MotorState_ & other) const + { + if (this->mode != other.mode) { + return false; + } + if (this->q != other.q) { + return false; + } + if (this->dq != other.dq) { + return false; + } + if (this->ddq != other.ddq) { + return false; + } + if (this->tau_est != other.tau_est) { + return false; + } + if (this->q_raw != other.q_raw) { + return false; + } + if (this->dq_raw != other.dq_raw) { + return false; + } + if (this->ddq_raw != other.ddq_raw) { + return false; + } + if (this->temperature != other.temperature) { + return false; + } + if (this->lost != other.lost) { + return false; + } + if (this->reserve != other.reserve) { + return false; + } + return true; + } + bool operator!=(const MotorState_ & other) const + { + return !this->operator==(other); + } +}; // struct MotorState_ + +// alias to use template instance with default allocator +using MotorState = + unitree_go::msg::MotorState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__traits.hpp new file mode 100644 index 0000000..b928e75 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/motor_state__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::MotorState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/MotorState"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.c new file mode 100644 index 0000000..7ea060c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.c @@ -0,0 +1,231 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/motor_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/motor_state__functions.h" +#include "unitree_go/msg/detail/motor_state__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void MotorState__rosidl_typesupport_introspection_c__MotorState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__MotorState__init(message_memory); +} + +void MotorState__rosidl_typesupport_introspection_c__MotorState_fini_function(void * message_memory) +{ + unitree_go__msg__MotorState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember MotorState__rosidl_typesupport_introspection_c__MotorState_message_member_array[11] = { + { + "mode", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, mode), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "q", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, q), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "dq", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, dq), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "ddq", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, ddq), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "tau_est", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, tau_est), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "q_raw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, q_raw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "dq_raw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, dq_raw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "ddq_raw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, ddq_raw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "temperature", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, temperature), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "lost", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, lost), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "reserve", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__MotorState, reserve), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers MotorState__rosidl_typesupport_introspection_c__MotorState_message_members = { + "unitree_go__msg", // message namespace + "MotorState", // message name + 11, // number of fields + sizeof(unitree_go__msg__MotorState), + MotorState__rosidl_typesupport_introspection_c__MotorState_message_member_array, // message members + MotorState__rosidl_typesupport_introspection_c__MotorState_init_function, // function to initialize message memory (memory has to be allocated) + MotorState__rosidl_typesupport_introspection_c__MotorState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t MotorState__rosidl_typesupport_introspection_c__MotorState_message_type_support_handle = { + 0, + &MotorState__rosidl_typesupport_introspection_c__MotorState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, MotorState)() { + if (!MotorState__rosidl_typesupport_introspection_c__MotorState_message_type_support_handle.typesupport_identifier) { + MotorState__rosidl_typesupport_introspection_c__MotorState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &MotorState__rosidl_typesupport_introspection_c__MotorState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.cpp new file mode 100644 index 0000000..2f9d84c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.cpp @@ -0,0 +1,277 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/motor_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void MotorState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::MotorState(_init); +} + +void MotorState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~MotorState(); +} + +size_t size_function__MotorState__reserve(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__MotorState__reserve(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__MotorState__reserve(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember MotorState_message_member_array[11] = { + { + "mode", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, mode), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "q", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, q), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "dq", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, dq), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "ddq", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, ddq), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "tau_est", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, tau_est), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "q_raw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, q_raw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "dq_raw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, dq_raw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "ddq_raw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, ddq_raw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "temperature", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, temperature), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "lost", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, lost), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "reserve", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::MotorState, reserve), // bytes offset in struct + nullptr, // default value + size_function__MotorState__reserve, // size() function pointer + get_const_function__MotorState__reserve, // get_const(index) function pointer + get_function__MotorState__reserve, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers MotorState_message_members = { + "unitree_go::msg", // message namespace + "MotorState", // message name + 11, // number of fields + sizeof(unitree_go::msg::MotorState), + MotorState_message_member_array, // message members + MotorState_init_function, // function to initialize message memory (memory has to be allocated) + MotorState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t MotorState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &MotorState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::MotorState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, MotorState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::MotorState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.h new file mode 100644 index 0000000..656c602 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + MotorState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.hpp new file mode 100644 index 0000000..c551d2d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/motor_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + MotorState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__MOTOR_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__builder.hpp new file mode 100644 index 0000000..480e4f7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__builder.hpp @@ -0,0 +1,151 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__BUILDER_HPP_ + +#include "unitree_go/msg/detail/path_point__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_PathPoint_vyaw +{ +public: + explicit Init_PathPoint_vyaw(::unitree_go::msg::PathPoint & msg) + : msg_(msg) + {} + ::unitree_go::msg::PathPoint vyaw(::unitree_go::msg::PathPoint::_vyaw_type arg) + { + msg_.vyaw = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +class Init_PathPoint_vy +{ +public: + explicit Init_PathPoint_vy(::unitree_go::msg::PathPoint & msg) + : msg_(msg) + {} + Init_PathPoint_vyaw vy(::unitree_go::msg::PathPoint::_vy_type arg) + { + msg_.vy = std::move(arg); + return Init_PathPoint_vyaw(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +class Init_PathPoint_vx +{ +public: + explicit Init_PathPoint_vx(::unitree_go::msg::PathPoint & msg) + : msg_(msg) + {} + Init_PathPoint_vy vx(::unitree_go::msg::PathPoint::_vx_type arg) + { + msg_.vx = std::move(arg); + return Init_PathPoint_vy(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +class Init_PathPoint_yaw +{ +public: + explicit Init_PathPoint_yaw(::unitree_go::msg::PathPoint & msg) + : msg_(msg) + {} + Init_PathPoint_vx yaw(::unitree_go::msg::PathPoint::_yaw_type arg) + { + msg_.yaw = std::move(arg); + return Init_PathPoint_vx(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +class Init_PathPoint_y +{ +public: + explicit Init_PathPoint_y(::unitree_go::msg::PathPoint & msg) + : msg_(msg) + {} + Init_PathPoint_yaw y(::unitree_go::msg::PathPoint::_y_type arg) + { + msg_.y = std::move(arg); + return Init_PathPoint_yaw(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +class Init_PathPoint_x +{ +public: + explicit Init_PathPoint_x(::unitree_go::msg::PathPoint & msg) + : msg_(msg) + {} + Init_PathPoint_y x(::unitree_go::msg::PathPoint::_x_type arg) + { + msg_.x = std::move(arg); + return Init_PathPoint_y(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +class Init_PathPoint_t_from_start +{ +public: + Init_PathPoint_t_from_start() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_PathPoint_x t_from_start(::unitree_go::msg::PathPoint::_t_from_start_type arg) + { + msg_.t_from_start = std::move(arg); + return Init_PathPoint_x(msg_); + } + +private: + ::unitree_go::msg::PathPoint msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::PathPoint>() +{ + return unitree_go::msg::builder::Init_PathPoint_t_from_start(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.c new file mode 100644 index 0000000..ee9e885 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.c @@ -0,0 +1,279 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/path_point__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__PathPoint__init(unitree_go__msg__PathPoint * msg) +{ + if (!msg) { + return false; + } + // t_from_start + // x + // y + // yaw + // vx + // vy + // vyaw + return true; +} + +void +unitree_go__msg__PathPoint__fini(unitree_go__msg__PathPoint * msg) +{ + if (!msg) { + return; + } + // t_from_start + // x + // y + // yaw + // vx + // vy + // vyaw +} + +bool +unitree_go__msg__PathPoint__are_equal(const unitree_go__msg__PathPoint * lhs, const unitree_go__msg__PathPoint * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // t_from_start + if (lhs->t_from_start != rhs->t_from_start) { + return false; + } + // x + if (lhs->x != rhs->x) { + return false; + } + // y + if (lhs->y != rhs->y) { + return false; + } + // yaw + if (lhs->yaw != rhs->yaw) { + return false; + } + // vx + if (lhs->vx != rhs->vx) { + return false; + } + // vy + if (lhs->vy != rhs->vy) { + return false; + } + // vyaw + if (lhs->vyaw != rhs->vyaw) { + return false; + } + return true; +} + +bool +unitree_go__msg__PathPoint__copy( + const unitree_go__msg__PathPoint * input, + unitree_go__msg__PathPoint * output) +{ + if (!input || !output) { + return false; + } + // t_from_start + output->t_from_start = input->t_from_start; + // x + output->x = input->x; + // y + output->y = input->y; + // yaw + output->yaw = input->yaw; + // vx + output->vx = input->vx; + // vy + output->vy = input->vy; + // vyaw + output->vyaw = input->vyaw; + return true; +} + +unitree_go__msg__PathPoint * +unitree_go__msg__PathPoint__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__PathPoint * msg = (unitree_go__msg__PathPoint *)allocator.allocate(sizeof(unitree_go__msg__PathPoint), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__PathPoint)); + bool success = unitree_go__msg__PathPoint__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__PathPoint__destroy(unitree_go__msg__PathPoint * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__PathPoint__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__PathPoint__Sequence__init(unitree_go__msg__PathPoint__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__PathPoint * data = NULL; + + if (size) { + data = (unitree_go__msg__PathPoint *)allocator.zero_allocate(size, sizeof(unitree_go__msg__PathPoint), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__PathPoint__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__PathPoint__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__PathPoint__Sequence__fini(unitree_go__msg__PathPoint__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__PathPoint__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__PathPoint__Sequence * +unitree_go__msg__PathPoint__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__PathPoint__Sequence * array = (unitree_go__msg__PathPoint__Sequence *)allocator.allocate(sizeof(unitree_go__msg__PathPoint__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__PathPoint__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__PathPoint__Sequence__destroy(unitree_go__msg__PathPoint__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__PathPoint__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__PathPoint__Sequence__are_equal(const unitree_go__msg__PathPoint__Sequence * lhs, const unitree_go__msg__PathPoint__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__PathPoint__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__PathPoint__Sequence__copy( + const unitree_go__msg__PathPoint__Sequence * input, + unitree_go__msg__PathPoint__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__PathPoint); + unitree_go__msg__PathPoint * data = + (unitree_go__msg__PathPoint *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__PathPoint__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__PathPoint__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__PathPoint__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.h new file mode 100644 index 0000000..679f242 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/path_point__struct.h" + +/// Initialize msg/PathPoint message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__PathPoint + * )) before or use + * unitree_go__msg__PathPoint__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__PathPoint__init(unitree_go__msg__PathPoint * msg); + +/// Finalize msg/PathPoint message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__PathPoint__fini(unitree_go__msg__PathPoint * msg); + +/// Create msg/PathPoint message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__PathPoint__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__PathPoint * +unitree_go__msg__PathPoint__create(); + +/// Destroy msg/PathPoint message. +/** + * It calls + * unitree_go__msg__PathPoint__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__PathPoint__destroy(unitree_go__msg__PathPoint * msg); + +/// Check for msg/PathPoint message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__PathPoint__are_equal(const unitree_go__msg__PathPoint * lhs, const unitree_go__msg__PathPoint * rhs); + +/// Copy a msg/PathPoint message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__PathPoint__copy( + const unitree_go__msg__PathPoint * input, + unitree_go__msg__PathPoint * output); + +/// Initialize array of msg/PathPoint messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__PathPoint__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__PathPoint__Sequence__init(unitree_go__msg__PathPoint__Sequence * array, size_t size); + +/// Finalize array of msg/PathPoint messages. +/** + * It calls + * unitree_go__msg__PathPoint__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__PathPoint__Sequence__fini(unitree_go__msg__PathPoint__Sequence * array); + +/// Create array of msg/PathPoint messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__PathPoint__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__PathPoint__Sequence * +unitree_go__msg__PathPoint__Sequence__create(size_t size); + +/// Destroy array of msg/PathPoint messages. +/** + * It calls + * unitree_go__msg__PathPoint__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__PathPoint__Sequence__destroy(unitree_go__msg__PathPoint__Sequence * array); + +/// Check for msg/PathPoint message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__PathPoint__Sequence__are_equal(const unitree_go__msg__PathPoint__Sequence * lhs, const unitree_go__msg__PathPoint__Sequence * rhs); + +/// Copy an array of msg/PathPoint messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__PathPoint__Sequence__copy( + const unitree_go__msg__PathPoint__Sequence * input, + unitree_go__msg__PathPoint__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..f1ee400 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__PathPoint( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__PathPoint( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, PathPoint)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..2218e77 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/path_point__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::PathPoint & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::PathPoint & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::PathPoint & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_PathPoint( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, PathPoint)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..a3d256b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, PathPoint)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..26eaf44 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, PathPoint)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.h new file mode 100644 index 0000000..10d75fe --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.h @@ -0,0 +1,46 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/PathPoint in the package unitree_go. +typedef struct unitree_go__msg__PathPoint +{ + float t_from_start; + float x; + float y; + float yaw; + float vx; + float vy; + float vyaw; +} unitree_go__msg__PathPoint; + +// Struct for a sequence of unitree_go__msg__PathPoint. +typedef struct unitree_go__msg__PathPoint__Sequence +{ + unitree_go__msg__PathPoint * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__PathPoint__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.hpp new file mode 100644 index 0000000..81630fb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__struct.hpp @@ -0,0 +1,214 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__PathPoint __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__PathPoint __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct PathPoint_ +{ + using Type = PathPoint_; + + explicit PathPoint_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->t_from_start = 0.0f; + this->x = 0.0f; + this->y = 0.0f; + this->yaw = 0.0f; + this->vx = 0.0f; + this->vy = 0.0f; + this->vyaw = 0.0f; + } + } + + explicit PathPoint_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->t_from_start = 0.0f; + this->x = 0.0f; + this->y = 0.0f; + this->yaw = 0.0f; + this->vx = 0.0f; + this->vy = 0.0f; + this->vyaw = 0.0f; + } + } + + // field types and members + using _t_from_start_type = + float; + _t_from_start_type t_from_start; + using _x_type = + float; + _x_type x; + using _y_type = + float; + _y_type y; + using _yaw_type = + float; + _yaw_type yaw; + using _vx_type = + float; + _vx_type vx; + using _vy_type = + float; + _vy_type vy; + using _vyaw_type = + float; + _vyaw_type vyaw; + + // setters for named parameter idiom + Type & set__t_from_start( + const float & _arg) + { + this->t_from_start = _arg; + return *this; + } + Type & set__x( + const float & _arg) + { + this->x = _arg; + return *this; + } + Type & set__y( + const float & _arg) + { + this->y = _arg; + return *this; + } + Type & set__yaw( + const float & _arg) + { + this->yaw = _arg; + return *this; + } + Type & set__vx( + const float & _arg) + { + this->vx = _arg; + return *this; + } + Type & set__vy( + const float & _arg) + { + this->vy = _arg; + return *this; + } + Type & set__vyaw( + const float & _arg) + { + this->vyaw = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::PathPoint_ *; + using ConstRawPtr = + const unitree_go::msg::PathPoint_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__PathPoint + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__PathPoint + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const PathPoint_ & other) const + { + if (this->t_from_start != other.t_from_start) { + return false; + } + if (this->x != other.x) { + return false; + } + if (this->y != other.y) { + return false; + } + if (this->yaw != other.yaw) { + return false; + } + if (this->vx != other.vx) { + return false; + } + if (this->vy != other.vy) { + return false; + } + if (this->vyaw != other.vyaw) { + return false; + } + return true; + } + bool operator!=(const PathPoint_ & other) const + { + return !this->operator==(other); + } +}; // struct PathPoint_ + +// alias to use template instance with default allocator +using PathPoint = + unitree_go::msg::PathPoint_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__traits.hpp new file mode 100644 index 0000000..ed48ad0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__TRAITS_HPP_ + +#include "unitree_go/msg/detail/path_point__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::PathPoint"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/PathPoint"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.c new file mode 100644 index 0000000..866f188 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.c @@ -0,0 +1,171 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/path_point__functions.h" +#include "unitree_go/msg/detail/path_point__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void PathPoint__rosidl_typesupport_introspection_c__PathPoint_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__PathPoint__init(message_memory); +} + +void PathPoint__rosidl_typesupport_introspection_c__PathPoint_fini_function(void * message_memory) +{ + unitree_go__msg__PathPoint__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_member_array[7] = { + { + "t_from_start", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, t_from_start), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "x", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, x), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "y", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, y), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vx", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, vx), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vy", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, vy), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "vyaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__PathPoint, vyaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_members = { + "unitree_go__msg", // message namespace + "PathPoint", // message name + 7, // number of fields + sizeof(unitree_go__msg__PathPoint), + PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_member_array, // message members + PathPoint__rosidl_typesupport_introspection_c__PathPoint_init_function, // function to initialize message memory (memory has to be allocated) + PathPoint__rosidl_typesupport_introspection_c__PathPoint_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_type_support_handle = { + 0, + &PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, PathPoint)() { + if (!PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_type_support_handle.typesupport_identifier) { + PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &PathPoint__rosidl_typesupport_introspection_c__PathPoint_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.cpp new file mode 100644 index 0000000..1b07bc5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.cpp @@ -0,0 +1,197 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/path_point__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void PathPoint_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::PathPoint(_init); +} + +void PathPoint_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~PathPoint(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember PathPoint_message_member_array[7] = { + { + "t_from_start", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, t_from_start), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "x", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, x), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "y", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, y), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vx", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, vx), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vy", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, vy), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "vyaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::PathPoint, vyaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers PathPoint_message_members = { + "unitree_go::msg", // message namespace + "PathPoint", // message name + 7, // number of fields + sizeof(unitree_go::msg::PathPoint), + PathPoint_message_member_array, // message members + PathPoint_init_function, // function to initialize message memory (memory has to be allocated) + PathPoint_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t PathPoint_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &PathPoint_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::PathPoint_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, PathPoint)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::PathPoint_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.h new file mode 100644 index 0000000..78f2d25 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + PathPoint +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.hpp new file mode 100644 index 0000000..f890102 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/path_point__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__PATH_POINT__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__PATH_POINT__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + PathPoint +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__PATH_POINT__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__builder.hpp new file mode 100644 index 0000000..ee1922b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__REQ__BUILDER_HPP_ + +#include "unitree_go/msg/detail/req__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Req_body +{ +public: + explicit Init_Req_body(::unitree_go::msg::Req & msg) + : msg_(msg) + {} + ::unitree_go::msg::Req body(::unitree_go::msg::Req::_body_type arg) + { + msg_.body = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::Req msg_; +}; + +class Init_Req_uuid +{ +public: + Init_Req_uuid() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Req_body uuid(::unitree_go::msg::Req::_uuid_type arg) + { + msg_.uuid = std::move(arg); + return Init_Req_body(msg_); + } + +private: + ::unitree_go::msg::Req msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::Req>() +{ + return unitree_go::msg::builder::Init_Req_uuid(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__REQ__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.c new file mode 100644 index 0000000..648e054 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.c @@ -0,0 +1,266 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/req__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `uuid` +// Member `body` +#include "rosidl_runtime_c/string_functions.h" + +bool +unitree_go__msg__Req__init(unitree_go__msg__Req * msg) +{ + if (!msg) { + return false; + } + // uuid + if (!rosidl_runtime_c__String__init(&msg->uuid)) { + unitree_go__msg__Req__fini(msg); + return false; + } + // body + if (!rosidl_runtime_c__String__init(&msg->body)) { + unitree_go__msg__Req__fini(msg); + return false; + } + return true; +} + +void +unitree_go__msg__Req__fini(unitree_go__msg__Req * msg) +{ + if (!msg) { + return; + } + // uuid + rosidl_runtime_c__String__fini(&msg->uuid); + // body + rosidl_runtime_c__String__fini(&msg->body); +} + +bool +unitree_go__msg__Req__are_equal(const unitree_go__msg__Req * lhs, const unitree_go__msg__Req * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // uuid + if (!rosidl_runtime_c__String__are_equal( + &(lhs->uuid), &(rhs->uuid))) + { + return false; + } + // body + if (!rosidl_runtime_c__String__are_equal( + &(lhs->body), &(rhs->body))) + { + return false; + } + return true; +} + +bool +unitree_go__msg__Req__copy( + const unitree_go__msg__Req * input, + unitree_go__msg__Req * output) +{ + if (!input || !output) { + return false; + } + // uuid + if (!rosidl_runtime_c__String__copy( + &(input->uuid), &(output->uuid))) + { + return false; + } + // body + if (!rosidl_runtime_c__String__copy( + &(input->body), &(output->body))) + { + return false; + } + return true; +} + +unitree_go__msg__Req * +unitree_go__msg__Req__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Req * msg = (unitree_go__msg__Req *)allocator.allocate(sizeof(unitree_go__msg__Req), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__Req)); + bool success = unitree_go__msg__Req__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__Req__destroy(unitree_go__msg__Req * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__Req__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__Req__Sequence__init(unitree_go__msg__Req__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Req * data = NULL; + + if (size) { + data = (unitree_go__msg__Req *)allocator.zero_allocate(size, sizeof(unitree_go__msg__Req), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__Req__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__Req__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__Req__Sequence__fini(unitree_go__msg__Req__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__Req__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__Req__Sequence * +unitree_go__msg__Req__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Req__Sequence * array = (unitree_go__msg__Req__Sequence *)allocator.allocate(sizeof(unitree_go__msg__Req__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__Req__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__Req__Sequence__destroy(unitree_go__msg__Req__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__Req__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__Req__Sequence__are_equal(const unitree_go__msg__Req__Sequence * lhs, const unitree_go__msg__Req__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__Req__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__Req__Sequence__copy( + const unitree_go__msg__Req__Sequence * input, + unitree_go__msg__Req__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__Req); + unitree_go__msg__Req * data = + (unitree_go__msg__Req *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__Req__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__Req__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__Req__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.h new file mode 100644 index 0000000..32d6d67 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__REQ__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/req__struct.h" + +/// Initialize msg/Req message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__Req + * )) before or use + * unitree_go__msg__Req__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Req__init(unitree_go__msg__Req * msg); + +/// Finalize msg/Req message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Req__fini(unitree_go__msg__Req * msg); + +/// Create msg/Req message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__Req__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Req * +unitree_go__msg__Req__create(); + +/// Destroy msg/Req message. +/** + * It calls + * unitree_go__msg__Req__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Req__destroy(unitree_go__msg__Req * msg); + +/// Check for msg/Req message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Req__are_equal(const unitree_go__msg__Req * lhs, const unitree_go__msg__Req * rhs); + +/// Copy a msg/Req message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Req__copy( + const unitree_go__msg__Req * input, + unitree_go__msg__Req * output); + +/// Initialize array of msg/Req messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__Req__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Req__Sequence__init(unitree_go__msg__Req__Sequence * array, size_t size); + +/// Finalize array of msg/Req messages. +/** + * It calls + * unitree_go__msg__Req__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Req__Sequence__fini(unitree_go__msg__Req__Sequence * array); + +/// Create array of msg/Req messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__Req__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Req__Sequence * +unitree_go__msg__Req__Sequence__create(size_t size); + +/// Destroy array of msg/Req messages. +/** + * It calls + * unitree_go__msg__Req__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Req__Sequence__destroy(unitree_go__msg__Req__Sequence * array); + +/// Check for msg/Req message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Req__Sequence__are_equal(const unitree_go__msg__Req__Sequence * lhs, const unitree_go__msg__Req__Sequence * rhs); + +/// Copy an array of msg/Req messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Req__Sequence__copy( + const unitree_go__msg__Req__Sequence * input, + unitree_go__msg__Req__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..8a60f3b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__Req( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__Req( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, Req)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..b888527 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/req__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::Req & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::Req & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::Req & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_Req( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, Req)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..76f8331 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Req)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..1c49e1e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Req)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.h new file mode 100644 index 0000000..dfda661 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.h @@ -0,0 +1,46 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__REQ__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'uuid' +// Member 'body' +#include "rosidl_runtime_c/string.h" + +// Struct defined in msg/Req in the package unitree_go. +typedef struct unitree_go__msg__Req +{ + rosidl_runtime_c__String uuid; + rosidl_runtime_c__String body; +} unitree_go__msg__Req; + +// Struct for a sequence of unitree_go__msg__Req. +typedef struct unitree_go__msg__Req__Sequence +{ + unitree_go__msg__Req * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__Req__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.hpp new file mode 100644 index 0000000..c21935c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__struct.hpp @@ -0,0 +1,145 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__REQ__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__Req __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__Req __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct Req_ +{ + using Type = Req_; + + explicit Req_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->uuid = ""; + this->body = ""; + } + } + + explicit Req_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : uuid(_alloc), + body(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->uuid = ""; + this->body = ""; + } + } + + // field types and members + using _uuid_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _uuid_type uuid; + using _body_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _body_type body; + + // setters for named parameter idiom + Type & set__uuid( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->uuid = _arg; + return *this; + } + Type & set__body( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->body = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::Req_ *; + using ConstRawPtr = + const unitree_go::msg::Req_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__Req + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__Req + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Req_ & other) const + { + if (this->uuid != other.uuid) { + return false; + } + if (this->body != other.body) { + return false; + } + return true; + } + bool operator!=(const Req_ & other) const + { + return !this->operator==(other); + } +}; // struct Req_ + +// alias to use template instance with default allocator +using Req = + unitree_go::msg::Req_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__REQ__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__traits.hpp new file mode 100644 index 0000000..5fc99c1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__REQ__TRAITS_HPP_ + +#include "unitree_go/msg/detail/req__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::Req"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/Req"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__REQ__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.c new file mode 100644 index 0000000..29996a1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.c @@ -0,0 +1,101 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/req__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/req__functions.h" +#include "unitree_go/msg/detail/req__struct.h" + + +// Include directives for member types +// Member `uuid` +// Member `body` +#include "rosidl_runtime_c/string_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Req__rosidl_typesupport_introspection_c__Req_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__Req__init(message_memory); +} + +void Req__rosidl_typesupport_introspection_c__Req_fini_function(void * message_memory) +{ + unitree_go__msg__Req__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Req__rosidl_typesupport_introspection_c__Req_message_member_array[2] = { + { + "uuid", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Req, uuid), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "body", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Req, body), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Req__rosidl_typesupport_introspection_c__Req_message_members = { + "unitree_go__msg", // message namespace + "Req", // message name + 2, // number of fields + sizeof(unitree_go__msg__Req), + Req__rosidl_typesupport_introspection_c__Req_message_member_array, // message members + Req__rosidl_typesupport_introspection_c__Req_init_function, // function to initialize message memory (memory has to be allocated) + Req__rosidl_typesupport_introspection_c__Req_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Req__rosidl_typesupport_introspection_c__Req_message_type_support_handle = { + 0, + &Req__rosidl_typesupport_introspection_c__Req_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Req)() { + if (!Req__rosidl_typesupport_introspection_c__Req_message_type_support_handle.typesupport_identifier) { + Req__rosidl_typesupport_introspection_c__Req_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Req__rosidl_typesupport_introspection_c__Req_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.cpp new file mode 100644 index 0000000..0f8d54e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.cpp @@ -0,0 +1,122 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/req__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Req_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::Req(_init); +} + +void Req_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Req(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Req_message_member_array[2] = { + { + "uuid", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Req, uuid), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "body", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Req, body), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Req_message_members = { + "unitree_go::msg", // message namespace + "Req", // message name + 2, // number of fields + sizeof(unitree_go::msg::Req), + Req_message_member_array, // message members + Req_init_function, // function to initialize message memory (memory has to be allocated) + Req_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Req_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Req_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Req_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Req)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Req_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.h new file mode 100644 index 0000000..b62b1e6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__REQ__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + Req +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.hpp new file mode 100644 index 0000000..f7ee4bc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/req__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__REQ__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__REQ__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + Req +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__REQ__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__builder.hpp new file mode 100644 index 0000000..734b284 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__builder.hpp @@ -0,0 +1,87 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__RES__BUILDER_HPP_ + +#include "unitree_go/msg/detail/res__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_Res_body +{ +public: + explicit Init_Res_body(::unitree_go::msg::Res & msg) + : msg_(msg) + {} + ::unitree_go::msg::Res body(::unitree_go::msg::Res::_body_type arg) + { + msg_.body = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::Res msg_; +}; + +class Init_Res_data +{ +public: + explicit Init_Res_data(::unitree_go::msg::Res & msg) + : msg_(msg) + {} + Init_Res_body data(::unitree_go::msg::Res::_data_type arg) + { + msg_.data = std::move(arg); + return Init_Res_body(msg_); + } + +private: + ::unitree_go::msg::Res msg_; +}; + +class Init_Res_uuid +{ +public: + Init_Res_uuid() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_Res_data uuid(::unitree_go::msg::Res::_uuid_type arg) + { + msg_.uuid = std::move(arg); + return Init_Res_data(msg_); + } + +private: + ::unitree_go::msg::Res msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::Res>() +{ + return unitree_go::msg::builder::Init_Res_uuid(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__RES__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.c new file mode 100644 index 0000000..1a6194e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.c @@ -0,0 +1,287 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/res__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `uuid` +// Member `body` +#include "rosidl_runtime_c/string_functions.h" +// Member `data` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool +unitree_go__msg__Res__init(unitree_go__msg__Res * msg) +{ + if (!msg) { + return false; + } + // uuid + if (!rosidl_runtime_c__String__init(&msg->uuid)) { + unitree_go__msg__Res__fini(msg); + return false; + } + // data + if (!rosidl_runtime_c__uint8__Sequence__init(&msg->data, 0)) { + unitree_go__msg__Res__fini(msg); + return false; + } + // body + if (!rosidl_runtime_c__String__init(&msg->body)) { + unitree_go__msg__Res__fini(msg); + return false; + } + return true; +} + +void +unitree_go__msg__Res__fini(unitree_go__msg__Res * msg) +{ + if (!msg) { + return; + } + // uuid + rosidl_runtime_c__String__fini(&msg->uuid); + // data + rosidl_runtime_c__uint8__Sequence__fini(&msg->data); + // body + rosidl_runtime_c__String__fini(&msg->body); +} + +bool +unitree_go__msg__Res__are_equal(const unitree_go__msg__Res * lhs, const unitree_go__msg__Res * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // uuid + if (!rosidl_runtime_c__String__are_equal( + &(lhs->uuid), &(rhs->uuid))) + { + return false; + } + // data + if (!rosidl_runtime_c__uint8__Sequence__are_equal( + &(lhs->data), &(rhs->data))) + { + return false; + } + // body + if (!rosidl_runtime_c__String__are_equal( + &(lhs->body), &(rhs->body))) + { + return false; + } + return true; +} + +bool +unitree_go__msg__Res__copy( + const unitree_go__msg__Res * input, + unitree_go__msg__Res * output) +{ + if (!input || !output) { + return false; + } + // uuid + if (!rosidl_runtime_c__String__copy( + &(input->uuid), &(output->uuid))) + { + return false; + } + // data + if (!rosidl_runtime_c__uint8__Sequence__copy( + &(input->data), &(output->data))) + { + return false; + } + // body + if (!rosidl_runtime_c__String__copy( + &(input->body), &(output->body))) + { + return false; + } + return true; +} + +unitree_go__msg__Res * +unitree_go__msg__Res__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Res * msg = (unitree_go__msg__Res *)allocator.allocate(sizeof(unitree_go__msg__Res), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__Res)); + bool success = unitree_go__msg__Res__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__Res__destroy(unitree_go__msg__Res * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__Res__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__Res__Sequence__init(unitree_go__msg__Res__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Res * data = NULL; + + if (size) { + data = (unitree_go__msg__Res *)allocator.zero_allocate(size, sizeof(unitree_go__msg__Res), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__Res__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__Res__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__Res__Sequence__fini(unitree_go__msg__Res__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__Res__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__Res__Sequence * +unitree_go__msg__Res__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__Res__Sequence * array = (unitree_go__msg__Res__Sequence *)allocator.allocate(sizeof(unitree_go__msg__Res__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__Res__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__Res__Sequence__destroy(unitree_go__msg__Res__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__Res__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__Res__Sequence__are_equal(const unitree_go__msg__Res__Sequence * lhs, const unitree_go__msg__Res__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__Res__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__Res__Sequence__copy( + const unitree_go__msg__Res__Sequence * input, + unitree_go__msg__Res__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__Res); + unitree_go__msg__Res * data = + (unitree_go__msg__Res *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__Res__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__Res__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__Res__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.h new file mode 100644 index 0000000..81fddbe --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__RES__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/res__struct.h" + +/// Initialize msg/Res message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__Res + * )) before or use + * unitree_go__msg__Res__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Res__init(unitree_go__msg__Res * msg); + +/// Finalize msg/Res message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Res__fini(unitree_go__msg__Res * msg); + +/// Create msg/Res message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__Res__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Res * +unitree_go__msg__Res__create(); + +/// Destroy msg/Res message. +/** + * It calls + * unitree_go__msg__Res__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Res__destroy(unitree_go__msg__Res * msg); + +/// Check for msg/Res message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Res__are_equal(const unitree_go__msg__Res * lhs, const unitree_go__msg__Res * rhs); + +/// Copy a msg/Res message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Res__copy( + const unitree_go__msg__Res * input, + unitree_go__msg__Res * output); + +/// Initialize array of msg/Res messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__Res__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Res__Sequence__init(unitree_go__msg__Res__Sequence * array, size_t size); + +/// Finalize array of msg/Res messages. +/** + * It calls + * unitree_go__msg__Res__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Res__Sequence__fini(unitree_go__msg__Res__Sequence * array); + +/// Create array of msg/Res messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__Res__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__Res__Sequence * +unitree_go__msg__Res__Sequence__create(size_t size); + +/// Destroy array of msg/Res messages. +/** + * It calls + * unitree_go__msg__Res__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__Res__Sequence__destroy(unitree_go__msg__Res__Sequence * array); + +/// Check for msg/Res message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Res__Sequence__are_equal(const unitree_go__msg__Res__Sequence * lhs, const unitree_go__msg__Res__Sequence * rhs); + +/// Copy an array of msg/Res messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__Res__Sequence__copy( + const unitree_go__msg__Res__Sequence * input, + unitree_go__msg__Res__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..40ae30f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__Res( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__Res( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, Res)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..eacf6e5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/res__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::Res & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::Res & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::Res & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_Res( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, Res)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..a4af5bd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Res)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..d3e3967 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Res)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.h new file mode 100644 index 0000000..ac3ce4b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.h @@ -0,0 +1,49 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__RES__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'uuid' +// Member 'body' +#include "rosidl_runtime_c/string.h" +// Member 'data' +#include "rosidl_runtime_c/primitives_sequence.h" + +// Struct defined in msg/Res in the package unitree_go. +typedef struct unitree_go__msg__Res +{ + rosidl_runtime_c__String uuid; + rosidl_runtime_c__uint8__Sequence data; + rosidl_runtime_c__String body; +} unitree_go__msg__Res; + +// Struct for a sequence of unitree_go__msg__Res. +typedef struct unitree_go__msg__Res__Sequence +{ + unitree_go__msg__Res * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__Res__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.hpp new file mode 100644 index 0000000..6b17a00 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__struct.hpp @@ -0,0 +1,157 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__RES__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__Res __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__Res __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct Res_ +{ + using Type = Res_; + + explicit Res_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->uuid = ""; + this->body = ""; + } + } + + explicit Res_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : uuid(_alloc), + body(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->uuid = ""; + this->body = ""; + } + } + + // field types and members + using _uuid_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _uuid_type uuid; + using _data_type = + std::vector::other>; + _data_type data; + using _body_type = + std::basic_string, typename ContainerAllocator::template rebind::other>; + _body_type body; + + // setters for named parameter idiom + Type & set__uuid( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->uuid = _arg; + return *this; + } + Type & set__data( + const std::vector::other> & _arg) + { + this->data = _arg; + return *this; + } + Type & set__body( + const std::basic_string, typename ContainerAllocator::template rebind::other> & _arg) + { + this->body = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::Res_ *; + using ConstRawPtr = + const unitree_go::msg::Res_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__Res + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__Res + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const Res_ & other) const + { + if (this->uuid != other.uuid) { + return false; + } + if (this->data != other.data) { + return false; + } + if (this->body != other.body) { + return false; + } + return true; + } + bool operator!=(const Res_ & other) const + { + return !this->operator==(other); + } +}; // struct Res_ + +// alias to use template instance with default allocator +using Res = + unitree_go::msg::Res_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__RES__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__traits.hpp new file mode 100644 index 0000000..f75a121 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__RES__TRAITS_HPP_ + +#include "unitree_go/msg/detail/res__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::Res"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/Res"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__RES__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.c new file mode 100644 index 0000000..bec88c1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.c @@ -0,0 +1,118 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/res__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/res__functions.h" +#include "unitree_go/msg/detail/res__struct.h" + + +// Include directives for member types +// Member `uuid` +// Member `body` +#include "rosidl_runtime_c/string_functions.h" +// Member `data` +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void Res__rosidl_typesupport_introspection_c__Res_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__Res__init(message_memory); +} + +void Res__rosidl_typesupport_introspection_c__Res_fini_function(void * message_memory) +{ + unitree_go__msg__Res__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember Res__rosidl_typesupport_introspection_c__Res_message_member_array[3] = { + { + "uuid", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Res, uuid), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "data", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Res, data), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "body", // name + rosidl_typesupport_introspection_c__ROS_TYPE_STRING, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__Res, body), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers Res__rosidl_typesupport_introspection_c__Res_message_members = { + "unitree_go__msg", // message namespace + "Res", // message name + 3, // number of fields + sizeof(unitree_go__msg__Res), + Res__rosidl_typesupport_introspection_c__Res_message_member_array, // message members + Res__rosidl_typesupport_introspection_c__Res_init_function, // function to initialize message memory (memory has to be allocated) + Res__rosidl_typesupport_introspection_c__Res_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t Res__rosidl_typesupport_introspection_c__Res_message_type_support_handle = { + 0, + &Res__rosidl_typesupport_introspection_c__Res_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, Res)() { + if (!Res__rosidl_typesupport_introspection_c__Res_message_type_support_handle.typesupport_identifier) { + Res__rosidl_typesupport_introspection_c__Res_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &Res__rosidl_typesupport_introspection_c__Res_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.cpp new file mode 100644 index 0000000..e489ff8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.cpp @@ -0,0 +1,164 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/res__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void Res_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::Res(_init); +} + +void Res_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~Res(); +} + +size_t size_function__Res__data(const void * untyped_member) +{ + const auto * member = reinterpret_cast *>(untyped_member); + return member->size(); +} + +const void * get_const_function__Res__data(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__Res__data(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void resize_function__Res__data(void * untyped_member, size_t size) +{ + auto * member = + reinterpret_cast *>(untyped_member); + member->resize(size); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember Res_message_member_array[3] = { + { + "uuid", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Res, uuid), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "data", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Res, data), // bytes offset in struct + nullptr, // default value + size_function__Res__data, // size() function pointer + get_const_function__Res__data, // get_const(index) function pointer + get_function__Res__data, // get(index) function pointer + resize_function__Res__data // resize(index) function pointer + }, + { + "body", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::Res, body), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers Res_message_members = { + "unitree_go::msg", // message namespace + "Res", // message name + 3, // number of fields + sizeof(unitree_go::msg::Res), + Res_message_member_array, // message members + Res_init_function, // function to initialize message memory (memory has to be allocated) + Res_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t Res_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &Res_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Res_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, Res)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::Res_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.h new file mode 100644 index 0000000..cdc5a32 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__RES__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + Res +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.hpp new file mode 100644 index 0000000..910817b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/res__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__RES__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__RES__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + Res +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__RES__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__builder.hpp new file mode 100644 index 0000000..1763725 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__builder.hpp @@ -0,0 +1,215 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__BUILDER_HPP_ + +#include "unitree_go/msg/detail/sport_mode_cmd__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_SportModeCmd_path_point +{ +public: + explicit Init_SportModeCmd_path_point(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + ::unitree_go::msg::SportModeCmd path_point(::unitree_go::msg::SportModeCmd::_path_point_type arg) + { + msg_.path_point = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_bms_cmd +{ +public: + explicit Init_SportModeCmd_bms_cmd(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_path_point bms_cmd(::unitree_go::msg::SportModeCmd::_bms_cmd_type arg) + { + msg_.bms_cmd = std::move(arg); + return Init_SportModeCmd_path_point(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_yaw_speed +{ +public: + explicit Init_SportModeCmd_yaw_speed(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_bms_cmd yaw_speed(::unitree_go::msg::SportModeCmd::_yaw_speed_type arg) + { + msg_.yaw_speed = std::move(arg); + return Init_SportModeCmd_bms_cmd(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_velocity +{ +public: + explicit Init_SportModeCmd_velocity(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_yaw_speed velocity(::unitree_go::msg::SportModeCmd::_velocity_type arg) + { + msg_.velocity = std::move(arg); + return Init_SportModeCmd_yaw_speed(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_euler +{ +public: + explicit Init_SportModeCmd_euler(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_velocity euler(::unitree_go::msg::SportModeCmd::_euler_type arg) + { + msg_.euler = std::move(arg); + return Init_SportModeCmd_velocity(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_position +{ +public: + explicit Init_SportModeCmd_position(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_euler position(::unitree_go::msg::SportModeCmd::_position_type arg) + { + msg_.position = std::move(arg); + return Init_SportModeCmd_euler(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_body_height +{ +public: + explicit Init_SportModeCmd_body_height(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_position body_height(::unitree_go::msg::SportModeCmd::_body_height_type arg) + { + msg_.body_height = std::move(arg); + return Init_SportModeCmd_position(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_foot_raise_height +{ +public: + explicit Init_SportModeCmd_foot_raise_height(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_body_height foot_raise_height(::unitree_go::msg::SportModeCmd::_foot_raise_height_type arg) + { + msg_.foot_raise_height = std::move(arg); + return Init_SportModeCmd_body_height(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_speed_level +{ +public: + explicit Init_SportModeCmd_speed_level(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_foot_raise_height speed_level(::unitree_go::msg::SportModeCmd::_speed_level_type arg) + { + msg_.speed_level = std::move(arg); + return Init_SportModeCmd_foot_raise_height(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_gait_type +{ +public: + explicit Init_SportModeCmd_gait_type(::unitree_go::msg::SportModeCmd & msg) + : msg_(msg) + {} + Init_SportModeCmd_speed_level gait_type(::unitree_go::msg::SportModeCmd::_gait_type_type arg) + { + msg_.gait_type = std::move(arg); + return Init_SportModeCmd_speed_level(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +class Init_SportModeCmd_mode +{ +public: + Init_SportModeCmd_mode() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_SportModeCmd_gait_type mode(::unitree_go::msg::SportModeCmd::_mode_type arg) + { + msg_.mode = std::move(arg); + return Init_SportModeCmd_gait_type(msg_); + } + +private: + ::unitree_go::msg::SportModeCmd msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::SportModeCmd>() +{ + return unitree_go::msg::builder::Init_SportModeCmd_mode(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.c new file mode 100644 index 0000000..9f72fd6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.c @@ -0,0 +1,359 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/sport_mode_cmd__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `bms_cmd` +#include "unitree_go/msg/detail/bms_cmd__functions.h" +// Member `path_point` +#include "unitree_go/msg/detail/path_point__functions.h" + +bool +unitree_go__msg__SportModeCmd__init(unitree_go__msg__SportModeCmd * msg) +{ + if (!msg) { + return false; + } + // mode + // gait_type + // speed_level + // foot_raise_height + // body_height + // position + // euler + // velocity + // yaw_speed + // bms_cmd + if (!unitree_go__msg__BmsCmd__init(&msg->bms_cmd)) { + unitree_go__msg__SportModeCmd__fini(msg); + return false; + } + // path_point + for (size_t i = 0; i < 30; ++i) { + if (!unitree_go__msg__PathPoint__init(&msg->path_point[i])) { + unitree_go__msg__SportModeCmd__fini(msg); + return false; + } + } + return true; +} + +void +unitree_go__msg__SportModeCmd__fini(unitree_go__msg__SportModeCmd * msg) +{ + if (!msg) { + return; + } + // mode + // gait_type + // speed_level + // foot_raise_height + // body_height + // position + // euler + // velocity + // yaw_speed + // bms_cmd + unitree_go__msg__BmsCmd__fini(&msg->bms_cmd); + // path_point + for (size_t i = 0; i < 30; ++i) { + unitree_go__msg__PathPoint__fini(&msg->path_point[i]); + } +} + +bool +unitree_go__msg__SportModeCmd__are_equal(const unitree_go__msg__SportModeCmd * lhs, const unitree_go__msg__SportModeCmd * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // mode + if (lhs->mode != rhs->mode) { + return false; + } + // gait_type + if (lhs->gait_type != rhs->gait_type) { + return false; + } + // speed_level + if (lhs->speed_level != rhs->speed_level) { + return false; + } + // foot_raise_height + if (lhs->foot_raise_height != rhs->foot_raise_height) { + return false; + } + // body_height + if (lhs->body_height != rhs->body_height) { + return false; + } + // position + for (size_t i = 0; i < 2; ++i) { + if (lhs->position[i] != rhs->position[i]) { + return false; + } + } + // euler + for (size_t i = 0; i < 3; ++i) { + if (lhs->euler[i] != rhs->euler[i]) { + return false; + } + } + // velocity + for (size_t i = 0; i < 2; ++i) { + if (lhs->velocity[i] != rhs->velocity[i]) { + return false; + } + } + // yaw_speed + if (lhs->yaw_speed != rhs->yaw_speed) { + return false; + } + // bms_cmd + if (!unitree_go__msg__BmsCmd__are_equal( + &(lhs->bms_cmd), &(rhs->bms_cmd))) + { + return false; + } + // path_point + for (size_t i = 0; i < 30; ++i) { + if (!unitree_go__msg__PathPoint__are_equal( + &(lhs->path_point[i]), &(rhs->path_point[i]))) + { + return false; + } + } + return true; +} + +bool +unitree_go__msg__SportModeCmd__copy( + const unitree_go__msg__SportModeCmd * input, + unitree_go__msg__SportModeCmd * output) +{ + if (!input || !output) { + return false; + } + // mode + output->mode = input->mode; + // gait_type + output->gait_type = input->gait_type; + // speed_level + output->speed_level = input->speed_level; + // foot_raise_height + output->foot_raise_height = input->foot_raise_height; + // body_height + output->body_height = input->body_height; + // position + for (size_t i = 0; i < 2; ++i) { + output->position[i] = input->position[i]; + } + // euler + for (size_t i = 0; i < 3; ++i) { + output->euler[i] = input->euler[i]; + } + // velocity + for (size_t i = 0; i < 2; ++i) { + output->velocity[i] = input->velocity[i]; + } + // yaw_speed + output->yaw_speed = input->yaw_speed; + // bms_cmd + if (!unitree_go__msg__BmsCmd__copy( + &(input->bms_cmd), &(output->bms_cmd))) + { + return false; + } + // path_point + for (size_t i = 0; i < 30; ++i) { + if (!unitree_go__msg__PathPoint__copy( + &(input->path_point[i]), &(output->path_point[i]))) + { + return false; + } + } + return true; +} + +unitree_go__msg__SportModeCmd * +unitree_go__msg__SportModeCmd__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__SportModeCmd * msg = (unitree_go__msg__SportModeCmd *)allocator.allocate(sizeof(unitree_go__msg__SportModeCmd), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__SportModeCmd)); + bool success = unitree_go__msg__SportModeCmd__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__SportModeCmd__destroy(unitree_go__msg__SportModeCmd * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__SportModeCmd__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__SportModeCmd__Sequence__init(unitree_go__msg__SportModeCmd__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__SportModeCmd * data = NULL; + + if (size) { + data = (unitree_go__msg__SportModeCmd *)allocator.zero_allocate(size, sizeof(unitree_go__msg__SportModeCmd), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__SportModeCmd__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__SportModeCmd__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__SportModeCmd__Sequence__fini(unitree_go__msg__SportModeCmd__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__SportModeCmd__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__SportModeCmd__Sequence * +unitree_go__msg__SportModeCmd__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__SportModeCmd__Sequence * array = (unitree_go__msg__SportModeCmd__Sequence *)allocator.allocate(sizeof(unitree_go__msg__SportModeCmd__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__SportModeCmd__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__SportModeCmd__Sequence__destroy(unitree_go__msg__SportModeCmd__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__SportModeCmd__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__SportModeCmd__Sequence__are_equal(const unitree_go__msg__SportModeCmd__Sequence * lhs, const unitree_go__msg__SportModeCmd__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__SportModeCmd__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__SportModeCmd__Sequence__copy( + const unitree_go__msg__SportModeCmd__Sequence * input, + unitree_go__msg__SportModeCmd__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__SportModeCmd); + unitree_go__msg__SportModeCmd * data = + (unitree_go__msg__SportModeCmd *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__SportModeCmd__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__SportModeCmd__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__SportModeCmd__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.h new file mode 100644 index 0000000..d8208f1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/sport_mode_cmd__struct.h" + +/// Initialize msg/SportModeCmd message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__SportModeCmd + * )) before or use + * unitree_go__msg__SportModeCmd__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeCmd__init(unitree_go__msg__SportModeCmd * msg); + +/// Finalize msg/SportModeCmd message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeCmd__fini(unitree_go__msg__SportModeCmd * msg); + +/// Create msg/SportModeCmd message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__SportModeCmd__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__SportModeCmd * +unitree_go__msg__SportModeCmd__create(); + +/// Destroy msg/SportModeCmd message. +/** + * It calls + * unitree_go__msg__SportModeCmd__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeCmd__destroy(unitree_go__msg__SportModeCmd * msg); + +/// Check for msg/SportModeCmd message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeCmd__are_equal(const unitree_go__msg__SportModeCmd * lhs, const unitree_go__msg__SportModeCmd * rhs); + +/// Copy a msg/SportModeCmd message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeCmd__copy( + const unitree_go__msg__SportModeCmd * input, + unitree_go__msg__SportModeCmd * output); + +/// Initialize array of msg/SportModeCmd messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__SportModeCmd__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeCmd__Sequence__init(unitree_go__msg__SportModeCmd__Sequence * array, size_t size); + +/// Finalize array of msg/SportModeCmd messages. +/** + * It calls + * unitree_go__msg__SportModeCmd__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeCmd__Sequence__fini(unitree_go__msg__SportModeCmd__Sequence * array); + +/// Create array of msg/SportModeCmd messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__SportModeCmd__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__SportModeCmd__Sequence * +unitree_go__msg__SportModeCmd__Sequence__create(size_t size); + +/// Destroy array of msg/SportModeCmd messages. +/** + * It calls + * unitree_go__msg__SportModeCmd__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeCmd__Sequence__destroy(unitree_go__msg__SportModeCmd__Sequence * array); + +/// Check for msg/SportModeCmd message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeCmd__Sequence__are_equal(const unitree_go__msg__SportModeCmd__Sequence * lhs, const unitree_go__msg__SportModeCmd__Sequence * rhs); + +/// Copy an array of msg/SportModeCmd messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeCmd__Sequence__copy( + const unitree_go__msg__SportModeCmd__Sequence * input, + unitree_go__msg__SportModeCmd__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..d0dd1a6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__SportModeCmd( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__SportModeCmd( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, SportModeCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..e7ba0cc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/sport_mode_cmd__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::SportModeCmd & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::SportModeCmd & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::SportModeCmd & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_SportModeCmd( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, SportModeCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..9a221af --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, SportModeCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..4c17d5f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, SportModeCmd)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.h new file mode 100644 index 0000000..94d8bb7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.h @@ -0,0 +1,56 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'bms_cmd' +#include "unitree_go/msg/detail/bms_cmd__struct.h" +// Member 'path_point' +#include "unitree_go/msg/detail/path_point__struct.h" + +// Struct defined in msg/SportModeCmd in the package unitree_go. +typedef struct unitree_go__msg__SportModeCmd +{ + uint8_t mode; + uint8_t gait_type; + uint8_t speed_level; + float foot_raise_height; + float body_height; + float position[2]; + float euler[3]; + float velocity[2]; + float yaw_speed; + unitree_go__msg__BmsCmd bms_cmd; + unitree_go__msg__PathPoint path_point[30]; +} unitree_go__msg__SportModeCmd; + +// Struct for a sequence of unitree_go__msg__SportModeCmd. +typedef struct unitree_go__msg__SportModeCmd__Sequence +{ + unitree_go__msg__SportModeCmd * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__SportModeCmd__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.hpp new file mode 100644 index 0000000..7c92570 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__struct.hpp @@ -0,0 +1,279 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'bms_cmd' +#include "unitree_go/msg/detail/bms_cmd__struct.hpp" +// Member 'path_point' +#include "unitree_go/msg/detail/path_point__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__SportModeCmd __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__SportModeCmd __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct SportModeCmd_ +{ + using Type = SportModeCmd_; + + explicit SportModeCmd_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : bms_cmd(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->gait_type = 0; + this->speed_level = 0; + this->foot_raise_height = 0.0f; + this->body_height = 0.0f; + std::fill::iterator, float>(this->position.begin(), this->position.end(), 0.0f); + std::fill::iterator, float>(this->euler.begin(), this->euler.end(), 0.0f); + std::fill::iterator, float>(this->velocity.begin(), this->velocity.end(), 0.0f); + this->yaw_speed = 0.0f; + this->path_point.fill(unitree_go::msg::PathPoint_{_init}); + } + } + + explicit SportModeCmd_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : position(_alloc), + euler(_alloc), + velocity(_alloc), + bms_cmd(_alloc, _init), + path_point(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->mode = 0; + this->gait_type = 0; + this->speed_level = 0; + this->foot_raise_height = 0.0f; + this->body_height = 0.0f; + std::fill::iterator, float>(this->position.begin(), this->position.end(), 0.0f); + std::fill::iterator, float>(this->euler.begin(), this->euler.end(), 0.0f); + std::fill::iterator, float>(this->velocity.begin(), this->velocity.end(), 0.0f); + this->yaw_speed = 0.0f; + this->path_point.fill(unitree_go::msg::PathPoint_{_alloc, _init}); + } + } + + // field types and members + using _mode_type = + uint8_t; + _mode_type mode; + using _gait_type_type = + uint8_t; + _gait_type_type gait_type; + using _speed_level_type = + uint8_t; + _speed_level_type speed_level; + using _foot_raise_height_type = + float; + _foot_raise_height_type foot_raise_height; + using _body_height_type = + float; + _body_height_type body_height; + using _position_type = + std::array; + _position_type position; + using _euler_type = + std::array; + _euler_type euler; + using _velocity_type = + std::array; + _velocity_type velocity; + using _yaw_speed_type = + float; + _yaw_speed_type yaw_speed; + using _bms_cmd_type = + unitree_go::msg::BmsCmd_; + _bms_cmd_type bms_cmd; + using _path_point_type = + std::array, 30>; + _path_point_type path_point; + + // setters for named parameter idiom + Type & set__mode( + const uint8_t & _arg) + { + this->mode = _arg; + return *this; + } + Type & set__gait_type( + const uint8_t & _arg) + { + this->gait_type = _arg; + return *this; + } + Type & set__speed_level( + const uint8_t & _arg) + { + this->speed_level = _arg; + return *this; + } + Type & set__foot_raise_height( + const float & _arg) + { + this->foot_raise_height = _arg; + return *this; + } + Type & set__body_height( + const float & _arg) + { + this->body_height = _arg; + return *this; + } + Type & set__position( + const std::array & _arg) + { + this->position = _arg; + return *this; + } + Type & set__euler( + const std::array & _arg) + { + this->euler = _arg; + return *this; + } + Type & set__velocity( + const std::array & _arg) + { + this->velocity = _arg; + return *this; + } + Type & set__yaw_speed( + const float & _arg) + { + this->yaw_speed = _arg; + return *this; + } + Type & set__bms_cmd( + const unitree_go::msg::BmsCmd_ & _arg) + { + this->bms_cmd = _arg; + return *this; + } + Type & set__path_point( + const std::array, 30> & _arg) + { + this->path_point = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::SportModeCmd_ *; + using ConstRawPtr = + const unitree_go::msg::SportModeCmd_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__SportModeCmd + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__SportModeCmd + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const SportModeCmd_ & other) const + { + if (this->mode != other.mode) { + return false; + } + if (this->gait_type != other.gait_type) { + return false; + } + if (this->speed_level != other.speed_level) { + return false; + } + if (this->foot_raise_height != other.foot_raise_height) { + return false; + } + if (this->body_height != other.body_height) { + return false; + } + if (this->position != other.position) { + return false; + } + if (this->euler != other.euler) { + return false; + } + if (this->velocity != other.velocity) { + return false; + } + if (this->yaw_speed != other.yaw_speed) { + return false; + } + if (this->bms_cmd != other.bms_cmd) { + return false; + } + if (this->path_point != other.path_point) { + return false; + } + return true; + } + bool operator!=(const SportModeCmd_ & other) const + { + return !this->operator==(other); + } +}; // struct SportModeCmd_ + +// alias to use template instance with default allocator +using SportModeCmd = + unitree_go::msg::SportModeCmd_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__traits.hpp new file mode 100644 index 0000000..90843ed --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__traits.hpp @@ -0,0 +1,48 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TRAITS_HPP_ + +#include "unitree_go/msg/detail/sport_mode_cmd__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'bms_cmd' +#include "unitree_go/msg/detail/bms_cmd__traits.hpp" +// Member 'path_point' +#include "unitree_go/msg/detail/path_point__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::SportModeCmd"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/SportModeCmd"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.c new file mode 100644 index 0000000..722d826 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.c @@ -0,0 +1,268 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/sport_mode_cmd__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/sport_mode_cmd__functions.h" +#include "unitree_go/msg/detail/sport_mode_cmd__struct.h" + + +// Include directives for member types +// Member `bms_cmd` +#include "unitree_go/msg/bms_cmd.h" +// Member `bms_cmd` +#include "unitree_go/msg/detail/bms_cmd__rosidl_typesupport_introspection_c.h" +// Member `path_point` +#include "unitree_go/msg/path_point.h" +// Member `path_point` +#include "unitree_go/msg/detail/path_point__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__SportModeCmd__init(message_memory); +} + +void SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_fini_function(void * message_memory) +{ + unitree_go__msg__SportModeCmd__fini(message_memory); +} + +size_t SportModeCmd__rosidl_typesupport_introspection_c__size_function__PathPoint__path_point( + const void * untyped_member) +{ + (void)untyped_member; + return 30; +} + +const void * SportModeCmd__rosidl_typesupport_introspection_c__get_const_function__PathPoint__path_point( + const void * untyped_member, size_t index) +{ + const unitree_go__msg__PathPoint ** member = + (const unitree_go__msg__PathPoint **)(untyped_member); + return &(*member)[index]; +} + +void * SportModeCmd__rosidl_typesupport_introspection_c__get_function__PathPoint__path_point( + void * untyped_member, size_t index) +{ + unitree_go__msg__PathPoint ** member = + (unitree_go__msg__PathPoint **)(untyped_member); + return &(*member)[index]; +} + +static rosidl_typesupport_introspection_c__MessageMember SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_member_array[11] = { + { + "mode", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, mode), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gait_type", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, gait_type), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "speed_level", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, speed_level), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_raise_height", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, foot_raise_height), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "body_height", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, body_height), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "position", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, position), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "euler", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, euler), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "velocity", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, velocity), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw_speed", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, yaw_speed), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "bms_cmd", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, bms_cmd), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "path_point", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + true, // is array + 30, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeCmd, path_point), // bytes offset in struct + NULL, // default value + SportModeCmd__rosidl_typesupport_introspection_c__size_function__PathPoint__path_point, // size() function pointer + SportModeCmd__rosidl_typesupport_introspection_c__get_const_function__PathPoint__path_point, // get_const(index) function pointer + SportModeCmd__rosidl_typesupport_introspection_c__get_function__PathPoint__path_point, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_members = { + "unitree_go__msg", // message namespace + "SportModeCmd", // message name + 11, // number of fields + sizeof(unitree_go__msg__SportModeCmd), + SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_member_array, // message members + SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_init_function, // function to initialize message memory (memory has to be allocated) + SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_type_support_handle = { + 0, + &SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, SportModeCmd)() { + SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_member_array[9].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, BmsCmd)(); + SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_member_array[10].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, PathPoint)(); + if (!SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_type_support_handle.typesupport_identifier) { + SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &SportModeCmd__rosidl_typesupport_introspection_c__SportModeCmd_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.cpp new file mode 100644 index 0000000..6dbc31b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.cpp @@ -0,0 +1,337 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/sport_mode_cmd__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void SportModeCmd_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::SportModeCmd(_init); +} + +void SportModeCmd_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~SportModeCmd(); +} + +size_t size_function__SportModeCmd__position(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__SportModeCmd__position(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeCmd__position(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeCmd__euler(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__SportModeCmd__euler(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeCmd__euler(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeCmd__velocity(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__SportModeCmd__velocity(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeCmd__velocity(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeCmd__path_point(const void * untyped_member) +{ + (void)untyped_member; + return 30; +} + +const void * get_const_function__SportModeCmd__path_point(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeCmd__path_point(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember SportModeCmd_message_member_array[11] = { + { + "mode", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, mode), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gait_type", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, gait_type), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "speed_level", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, speed_level), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_raise_height", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, foot_raise_height), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "body_height", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, body_height), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "position", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, position), // bytes offset in struct + nullptr, // default value + size_function__SportModeCmd__position, // size() function pointer + get_const_function__SportModeCmd__position, // get_const(index) function pointer + get_function__SportModeCmd__position, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "euler", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, euler), // bytes offset in struct + nullptr, // default value + size_function__SportModeCmd__euler, // size() function pointer + get_const_function__SportModeCmd__euler, // get_const(index) function pointer + get_function__SportModeCmd__euler, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "velocity", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, velocity), // bytes offset in struct + nullptr, // default value + size_function__SportModeCmd__velocity, // size() function pointer + get_const_function__SportModeCmd__velocity, // get_const(index) function pointer + get_function__SportModeCmd__velocity, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw_speed", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, yaw_speed), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "bms_cmd", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, bms_cmd), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "path_point", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + true, // is array + 30, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeCmd, path_point), // bytes offset in struct + nullptr, // default value + size_function__SportModeCmd__path_point, // size() function pointer + get_const_function__SportModeCmd__path_point, // get_const(index) function pointer + get_function__SportModeCmd__path_point, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers SportModeCmd_message_members = { + "unitree_go::msg", // message namespace + "SportModeCmd", // message name + 11, // number of fields + sizeof(unitree_go::msg::SportModeCmd), + SportModeCmd_message_member_array, // message members + SportModeCmd_init_function, // function to initialize message memory (memory has to be allocated) + SportModeCmd_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t SportModeCmd_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SportModeCmd_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::SportModeCmd_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, SportModeCmd)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::SportModeCmd_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.h new file mode 100644 index 0000000..4d9c4cb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + SportModeCmd +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.hpp new file mode 100644 index 0000000..70d77da --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_cmd__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + SportModeCmd +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_CMD__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__builder.hpp new file mode 100644 index 0000000..d4a8fe8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__builder.hpp @@ -0,0 +1,279 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/sport_mode_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_SportModeState_foot_speed_body +{ +public: + explicit Init_SportModeState_foot_speed_body(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + ::unitree_go::msg::SportModeState foot_speed_body(::unitree_go::msg::SportModeState::_foot_speed_body_type arg) + { + msg_.foot_speed_body = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_foot_position_body +{ +public: + explicit Init_SportModeState_foot_position_body(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_foot_speed_body foot_position_body(::unitree_go::msg::SportModeState::_foot_position_body_type arg) + { + msg_.foot_position_body = std::move(arg); + return Init_SportModeState_foot_speed_body(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_foot_force +{ +public: + explicit Init_SportModeState_foot_force(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_foot_position_body foot_force(::unitree_go::msg::SportModeState::_foot_force_type arg) + { + msg_.foot_force = std::move(arg); + return Init_SportModeState_foot_position_body(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_range_obstacle +{ +public: + explicit Init_SportModeState_range_obstacle(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_foot_force range_obstacle(::unitree_go::msg::SportModeState::_range_obstacle_type arg) + { + msg_.range_obstacle = std::move(arg); + return Init_SportModeState_foot_force(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_yaw_speed +{ +public: + explicit Init_SportModeState_yaw_speed(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_range_obstacle yaw_speed(::unitree_go::msg::SportModeState::_yaw_speed_type arg) + { + msg_.yaw_speed = std::move(arg); + return Init_SportModeState_range_obstacle(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_velocity +{ +public: + explicit Init_SportModeState_velocity(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_yaw_speed velocity(::unitree_go::msg::SportModeState::_velocity_type arg) + { + msg_.velocity = std::move(arg); + return Init_SportModeState_yaw_speed(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_body_height +{ +public: + explicit Init_SportModeState_body_height(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_velocity body_height(::unitree_go::msg::SportModeState::_body_height_type arg) + { + msg_.body_height = std::move(arg); + return Init_SportModeState_velocity(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_position +{ +public: + explicit Init_SportModeState_position(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_body_height position(::unitree_go::msg::SportModeState::_position_type arg) + { + msg_.position = std::move(arg); + return Init_SportModeState_body_height(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_foot_raise_height +{ +public: + explicit Init_SportModeState_foot_raise_height(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_position foot_raise_height(::unitree_go::msg::SportModeState::_foot_raise_height_type arg) + { + msg_.foot_raise_height = std::move(arg); + return Init_SportModeState_position(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_gait_type +{ +public: + explicit Init_SportModeState_gait_type(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_foot_raise_height gait_type(::unitree_go::msg::SportModeState::_gait_type_type arg) + { + msg_.gait_type = std::move(arg); + return Init_SportModeState_foot_raise_height(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_progress +{ +public: + explicit Init_SportModeState_progress(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_gait_type progress(::unitree_go::msg::SportModeState::_progress_type arg) + { + msg_.progress = std::move(arg); + return Init_SportModeState_gait_type(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_mode +{ +public: + explicit Init_SportModeState_mode(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_progress mode(::unitree_go::msg::SportModeState::_mode_type arg) + { + msg_.mode = std::move(arg); + return Init_SportModeState_progress(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_imu_state +{ +public: + explicit Init_SportModeState_imu_state(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_mode imu_state(::unitree_go::msg::SportModeState::_imu_state_type arg) + { + msg_.imu_state = std::move(arg); + return Init_SportModeState_mode(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_error_code +{ +public: + explicit Init_SportModeState_error_code(::unitree_go::msg::SportModeState & msg) + : msg_(msg) + {} + Init_SportModeState_imu_state error_code(::unitree_go::msg::SportModeState::_error_code_type arg) + { + msg_.error_code = std::move(arg); + return Init_SportModeState_imu_state(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +class Init_SportModeState_stamp +{ +public: + Init_SportModeState_stamp() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_SportModeState_error_code stamp(::unitree_go::msg::SportModeState::_stamp_type arg) + { + msg_.stamp = std::move(arg); + return Init_SportModeState_error_code(msg_); + } + +private: + ::unitree_go::msg::SportModeState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::SportModeState>() +{ + return unitree_go::msg::builder::Init_SportModeState_stamp(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.c new file mode 100644 index 0000000..4b9bfd1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.c @@ -0,0 +1,395 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/sport_mode_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +// Include directives for member types +// Member `stamp` +#include "unitree_go/msg/detail/time_spec__functions.h" +// Member `imu_state` +#include "unitree_go/msg/detail/imu_state__functions.h" + +bool +unitree_go__msg__SportModeState__init(unitree_go__msg__SportModeState * msg) +{ + if (!msg) { + return false; + } + // stamp + if (!unitree_go__msg__TimeSpec__init(&msg->stamp)) { + unitree_go__msg__SportModeState__fini(msg); + return false; + } + // error_code + // imu_state + if (!unitree_go__msg__IMUState__init(&msg->imu_state)) { + unitree_go__msg__SportModeState__fini(msg); + return false; + } + // mode + // progress + // gait_type + // foot_raise_height + // position + // body_height + // velocity + // yaw_speed + // range_obstacle + // foot_force + // foot_position_body + // foot_speed_body + return true; +} + +void +unitree_go__msg__SportModeState__fini(unitree_go__msg__SportModeState * msg) +{ + if (!msg) { + return; + } + // stamp + unitree_go__msg__TimeSpec__fini(&msg->stamp); + // error_code + // imu_state + unitree_go__msg__IMUState__fini(&msg->imu_state); + // mode + // progress + // gait_type + // foot_raise_height + // position + // body_height + // velocity + // yaw_speed + // range_obstacle + // foot_force + // foot_position_body + // foot_speed_body +} + +bool +unitree_go__msg__SportModeState__are_equal(const unitree_go__msg__SportModeState * lhs, const unitree_go__msg__SportModeState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // stamp + if (!unitree_go__msg__TimeSpec__are_equal( + &(lhs->stamp), &(rhs->stamp))) + { + return false; + } + // error_code + if (lhs->error_code != rhs->error_code) { + return false; + } + // imu_state + if (!unitree_go__msg__IMUState__are_equal( + &(lhs->imu_state), &(rhs->imu_state))) + { + return false; + } + // mode + if (lhs->mode != rhs->mode) { + return false; + } + // progress + if (lhs->progress != rhs->progress) { + return false; + } + // gait_type + if (lhs->gait_type != rhs->gait_type) { + return false; + } + // foot_raise_height + if (lhs->foot_raise_height != rhs->foot_raise_height) { + return false; + } + // position + for (size_t i = 0; i < 3; ++i) { + if (lhs->position[i] != rhs->position[i]) { + return false; + } + } + // body_height + if (lhs->body_height != rhs->body_height) { + return false; + } + // velocity + for (size_t i = 0; i < 3; ++i) { + if (lhs->velocity[i] != rhs->velocity[i]) { + return false; + } + } + // yaw_speed + if (lhs->yaw_speed != rhs->yaw_speed) { + return false; + } + // range_obstacle + for (size_t i = 0; i < 4; ++i) { + if (lhs->range_obstacle[i] != rhs->range_obstacle[i]) { + return false; + } + } + // foot_force + for (size_t i = 0; i < 4; ++i) { + if (lhs->foot_force[i] != rhs->foot_force[i]) { + return false; + } + } + // foot_position_body + for (size_t i = 0; i < 12; ++i) { + if (lhs->foot_position_body[i] != rhs->foot_position_body[i]) { + return false; + } + } + // foot_speed_body + for (size_t i = 0; i < 12; ++i) { + if (lhs->foot_speed_body[i] != rhs->foot_speed_body[i]) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__SportModeState__copy( + const unitree_go__msg__SportModeState * input, + unitree_go__msg__SportModeState * output) +{ + if (!input || !output) { + return false; + } + // stamp + if (!unitree_go__msg__TimeSpec__copy( + &(input->stamp), &(output->stamp))) + { + return false; + } + // error_code + output->error_code = input->error_code; + // imu_state + if (!unitree_go__msg__IMUState__copy( + &(input->imu_state), &(output->imu_state))) + { + return false; + } + // mode + output->mode = input->mode; + // progress + output->progress = input->progress; + // gait_type + output->gait_type = input->gait_type; + // foot_raise_height + output->foot_raise_height = input->foot_raise_height; + // position + for (size_t i = 0; i < 3; ++i) { + output->position[i] = input->position[i]; + } + // body_height + output->body_height = input->body_height; + // velocity + for (size_t i = 0; i < 3; ++i) { + output->velocity[i] = input->velocity[i]; + } + // yaw_speed + output->yaw_speed = input->yaw_speed; + // range_obstacle + for (size_t i = 0; i < 4; ++i) { + output->range_obstacle[i] = input->range_obstacle[i]; + } + // foot_force + for (size_t i = 0; i < 4; ++i) { + output->foot_force[i] = input->foot_force[i]; + } + // foot_position_body + for (size_t i = 0; i < 12; ++i) { + output->foot_position_body[i] = input->foot_position_body[i]; + } + // foot_speed_body + for (size_t i = 0; i < 12; ++i) { + output->foot_speed_body[i] = input->foot_speed_body[i]; + } + return true; +} + +unitree_go__msg__SportModeState * +unitree_go__msg__SportModeState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__SportModeState * msg = (unitree_go__msg__SportModeState *)allocator.allocate(sizeof(unitree_go__msg__SportModeState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__SportModeState)); + bool success = unitree_go__msg__SportModeState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__SportModeState__destroy(unitree_go__msg__SportModeState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__SportModeState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__SportModeState__Sequence__init(unitree_go__msg__SportModeState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__SportModeState * data = NULL; + + if (size) { + data = (unitree_go__msg__SportModeState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__SportModeState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__SportModeState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__SportModeState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__SportModeState__Sequence__fini(unitree_go__msg__SportModeState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__SportModeState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__SportModeState__Sequence * +unitree_go__msg__SportModeState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__SportModeState__Sequence * array = (unitree_go__msg__SportModeState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__SportModeState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__SportModeState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__SportModeState__Sequence__destroy(unitree_go__msg__SportModeState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__SportModeState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__SportModeState__Sequence__are_equal(const unitree_go__msg__SportModeState__Sequence * lhs, const unitree_go__msg__SportModeState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__SportModeState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__SportModeState__Sequence__copy( + const unitree_go__msg__SportModeState__Sequence * input, + unitree_go__msg__SportModeState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__SportModeState); + unitree_go__msg__SportModeState * data = + (unitree_go__msg__SportModeState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__SportModeState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__SportModeState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__SportModeState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.h new file mode 100644 index 0000000..5943f7e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/sport_mode_state__struct.h" + +/// Initialize msg/SportModeState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__SportModeState + * )) before or use + * unitree_go__msg__SportModeState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeState__init(unitree_go__msg__SportModeState * msg); + +/// Finalize msg/SportModeState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeState__fini(unitree_go__msg__SportModeState * msg); + +/// Create msg/SportModeState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__SportModeState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__SportModeState * +unitree_go__msg__SportModeState__create(); + +/// Destroy msg/SportModeState message. +/** + * It calls + * unitree_go__msg__SportModeState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeState__destroy(unitree_go__msg__SportModeState * msg); + +/// Check for msg/SportModeState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeState__are_equal(const unitree_go__msg__SportModeState * lhs, const unitree_go__msg__SportModeState * rhs); + +/// Copy a msg/SportModeState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeState__copy( + const unitree_go__msg__SportModeState * input, + unitree_go__msg__SportModeState * output); + +/// Initialize array of msg/SportModeState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__SportModeState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeState__Sequence__init(unitree_go__msg__SportModeState__Sequence * array, size_t size); + +/// Finalize array of msg/SportModeState messages. +/** + * It calls + * unitree_go__msg__SportModeState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeState__Sequence__fini(unitree_go__msg__SportModeState__Sequence * array); + +/// Create array of msg/SportModeState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__SportModeState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__SportModeState__Sequence * +unitree_go__msg__SportModeState__Sequence__create(size_t size); + +/// Destroy array of msg/SportModeState messages. +/** + * It calls + * unitree_go__msg__SportModeState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__SportModeState__Sequence__destroy(unitree_go__msg__SportModeState__Sequence * array); + +/// Check for msg/SportModeState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeState__Sequence__are_equal(const unitree_go__msg__SportModeState__Sequence * lhs, const unitree_go__msg__SportModeState__Sequence * rhs); + +/// Copy an array of msg/SportModeState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__SportModeState__Sequence__copy( + const unitree_go__msg__SportModeState__Sequence * input, + unitree_go__msg__SportModeState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..6ea7d97 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__SportModeState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__SportModeState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, SportModeState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..a254bc2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/sport_mode_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::SportModeState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::SportModeState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::SportModeState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_SportModeState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, SportModeState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..a6c7219 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, SportModeState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..44fc169 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, SportModeState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.h new file mode 100644 index 0000000..fd4313d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.h @@ -0,0 +1,60 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Include directives for member types +// Member 'stamp' +#include "unitree_go/msg/detail/time_spec__struct.h" +// Member 'imu_state' +#include "unitree_go/msg/detail/imu_state__struct.h" + +// Struct defined in msg/SportModeState in the package unitree_go. +typedef struct unitree_go__msg__SportModeState +{ + unitree_go__msg__TimeSpec stamp; + uint32_t error_code; + unitree_go__msg__IMUState imu_state; + uint8_t mode; + float progress; + uint8_t gait_type; + float foot_raise_height; + float position[3]; + float body_height; + float velocity[3]; + float yaw_speed; + float range_obstacle[4]; + int16_t foot_force[4]; + float foot_position_body[12]; + float foot_speed_body[12]; +} unitree_go__msg__SportModeState; + +// Struct for a sequence of unitree_go__msg__SportModeState. +typedef struct unitree_go__msg__SportModeState__Sequence +{ + unitree_go__msg__SportModeState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__SportModeState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.hpp new file mode 100644 index 0000000..96823eb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__struct.hpp @@ -0,0 +1,337 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +// Include directives for member types +// Member 'stamp' +#include "unitree_go/msg/detail/time_spec__struct.hpp" +// Member 'imu_state' +#include "unitree_go/msg/detail/imu_state__struct.hpp" + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__SportModeState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__SportModeState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct SportModeState_ +{ + using Type = SportModeState_; + + explicit SportModeState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : stamp(_init), + imu_state(_init) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->error_code = 0ul; + this->mode = 0; + this->progress = 0.0f; + this->gait_type = 0; + this->foot_raise_height = 0.0f; + std::fill::iterator, float>(this->position.begin(), this->position.end(), 0.0f); + this->body_height = 0.0f; + std::fill::iterator, float>(this->velocity.begin(), this->velocity.end(), 0.0f); + this->yaw_speed = 0.0f; + std::fill::iterator, float>(this->range_obstacle.begin(), this->range_obstacle.end(), 0.0f); + std::fill::iterator, int16_t>(this->foot_force.begin(), this->foot_force.end(), 0); + std::fill::iterator, float>(this->foot_position_body.begin(), this->foot_position_body.end(), 0.0f); + std::fill::iterator, float>(this->foot_speed_body.begin(), this->foot_speed_body.end(), 0.0f); + } + } + + explicit SportModeState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : stamp(_alloc, _init), + imu_state(_alloc, _init), + position(_alloc), + velocity(_alloc), + range_obstacle(_alloc), + foot_force(_alloc), + foot_position_body(_alloc), + foot_speed_body(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->error_code = 0ul; + this->mode = 0; + this->progress = 0.0f; + this->gait_type = 0; + this->foot_raise_height = 0.0f; + std::fill::iterator, float>(this->position.begin(), this->position.end(), 0.0f); + this->body_height = 0.0f; + std::fill::iterator, float>(this->velocity.begin(), this->velocity.end(), 0.0f); + this->yaw_speed = 0.0f; + std::fill::iterator, float>(this->range_obstacle.begin(), this->range_obstacle.end(), 0.0f); + std::fill::iterator, int16_t>(this->foot_force.begin(), this->foot_force.end(), 0); + std::fill::iterator, float>(this->foot_position_body.begin(), this->foot_position_body.end(), 0.0f); + std::fill::iterator, float>(this->foot_speed_body.begin(), this->foot_speed_body.end(), 0.0f); + } + } + + // field types and members + using _stamp_type = + unitree_go::msg::TimeSpec_; + _stamp_type stamp; + using _error_code_type = + uint32_t; + _error_code_type error_code; + using _imu_state_type = + unitree_go::msg::IMUState_; + _imu_state_type imu_state; + using _mode_type = + uint8_t; + _mode_type mode; + using _progress_type = + float; + _progress_type progress; + using _gait_type_type = + uint8_t; + _gait_type_type gait_type; + using _foot_raise_height_type = + float; + _foot_raise_height_type foot_raise_height; + using _position_type = + std::array; + _position_type position; + using _body_height_type = + float; + _body_height_type body_height; + using _velocity_type = + std::array; + _velocity_type velocity; + using _yaw_speed_type = + float; + _yaw_speed_type yaw_speed; + using _range_obstacle_type = + std::array; + _range_obstacle_type range_obstacle; + using _foot_force_type = + std::array; + _foot_force_type foot_force; + using _foot_position_body_type = + std::array; + _foot_position_body_type foot_position_body; + using _foot_speed_body_type = + std::array; + _foot_speed_body_type foot_speed_body; + + // setters for named parameter idiom + Type & set__stamp( + const unitree_go::msg::TimeSpec_ & _arg) + { + this->stamp = _arg; + return *this; + } + Type & set__error_code( + const uint32_t & _arg) + { + this->error_code = _arg; + return *this; + } + Type & set__imu_state( + const unitree_go::msg::IMUState_ & _arg) + { + this->imu_state = _arg; + return *this; + } + Type & set__mode( + const uint8_t & _arg) + { + this->mode = _arg; + return *this; + } + Type & set__progress( + const float & _arg) + { + this->progress = _arg; + return *this; + } + Type & set__gait_type( + const uint8_t & _arg) + { + this->gait_type = _arg; + return *this; + } + Type & set__foot_raise_height( + const float & _arg) + { + this->foot_raise_height = _arg; + return *this; + } + Type & set__position( + const std::array & _arg) + { + this->position = _arg; + return *this; + } + Type & set__body_height( + const float & _arg) + { + this->body_height = _arg; + return *this; + } + Type & set__velocity( + const std::array & _arg) + { + this->velocity = _arg; + return *this; + } + Type & set__yaw_speed( + const float & _arg) + { + this->yaw_speed = _arg; + return *this; + } + Type & set__range_obstacle( + const std::array & _arg) + { + this->range_obstacle = _arg; + return *this; + } + Type & set__foot_force( + const std::array & _arg) + { + this->foot_force = _arg; + return *this; + } + Type & set__foot_position_body( + const std::array & _arg) + { + this->foot_position_body = _arg; + return *this; + } + Type & set__foot_speed_body( + const std::array & _arg) + { + this->foot_speed_body = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::SportModeState_ *; + using ConstRawPtr = + const unitree_go::msg::SportModeState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__SportModeState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__SportModeState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const SportModeState_ & other) const + { + if (this->stamp != other.stamp) { + return false; + } + if (this->error_code != other.error_code) { + return false; + } + if (this->imu_state != other.imu_state) { + return false; + } + if (this->mode != other.mode) { + return false; + } + if (this->progress != other.progress) { + return false; + } + if (this->gait_type != other.gait_type) { + return false; + } + if (this->foot_raise_height != other.foot_raise_height) { + return false; + } + if (this->position != other.position) { + return false; + } + if (this->body_height != other.body_height) { + return false; + } + if (this->velocity != other.velocity) { + return false; + } + if (this->yaw_speed != other.yaw_speed) { + return false; + } + if (this->range_obstacle != other.range_obstacle) { + return false; + } + if (this->foot_force != other.foot_force) { + return false; + } + if (this->foot_position_body != other.foot_position_body) { + return false; + } + if (this->foot_speed_body != other.foot_speed_body) { + return false; + } + return true; + } + bool operator!=(const SportModeState_ & other) const + { + return !this->operator==(other); + } +}; // struct SportModeState_ + +// alias to use template instance with default allocator +using SportModeState = + unitree_go::msg::SportModeState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__traits.hpp new file mode 100644 index 0000000..e71869f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__traits.hpp @@ -0,0 +1,48 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/sport_mode_state__struct.hpp" +#include +#include +#include + +// Include directives for member types +// Member 'stamp' +#include "unitree_go/msg/detail/time_spec__traits.hpp" +// Member 'imu_state' +#include "unitree_go/msg/detail/imu_state__traits.hpp" + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::SportModeState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/SportModeState"; +} + +template<> +struct has_fixed_size + : std::integral_constant::value && has_fixed_size::value> {}; + +template<> +struct has_bounded_size + : std::integral_constant::value && has_bounded_size::value> {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.c new file mode 100644 index 0000000..83ba35b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.c @@ -0,0 +1,305 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/sport_mode_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/sport_mode_state__functions.h" +#include "unitree_go/msg/detail/sport_mode_state__struct.h" + + +// Include directives for member types +// Member `stamp` +#include "unitree_go/msg/time_spec.h" +// Member `stamp` +#include "unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_c.h" +// Member `imu_state` +#include "unitree_go/msg/imu_state.h" +// Member `imu_state` +#include "unitree_go/msg/detail/imu_state__rosidl_typesupport_introspection_c.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SportModeState__rosidl_typesupport_introspection_c__SportModeState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__SportModeState__init(message_memory); +} + +void SportModeState__rosidl_typesupport_introspection_c__SportModeState_fini_function(void * message_memory) +{ + unitree_go__msg__SportModeState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_member_array[15] = { + { + "stamp", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, stamp), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "error_code", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, error_code), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "imu_state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + NULL, // members of sub message (initialized later) + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, imu_state), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "mode", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, mode), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "progress", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, progress), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "gait_type", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, gait_type), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_raise_height", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, foot_raise_height), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "position", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, position), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "body_height", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, body_height), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "velocity", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, velocity), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw_speed", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, yaw_speed), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "range_obstacle", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, range_obstacle), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_force", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT16, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, foot_force), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_position_body", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 12, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, foot_position_body), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "foot_speed_body", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 12, // array size + false, // is upper bound + offsetof(unitree_go__msg__SportModeState, foot_speed_body), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_members = { + "unitree_go__msg", // message namespace + "SportModeState", // message name + 15, // number of fields + sizeof(unitree_go__msg__SportModeState), + SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_member_array, // message members + SportModeState__rosidl_typesupport_introspection_c__SportModeState_init_function, // function to initialize message memory (memory has to be allocated) + SportModeState__rosidl_typesupport_introspection_c__SportModeState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_type_support_handle = { + 0, + &SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, SportModeState)() { + SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_member_array[0].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, TimeSpec)(); + SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_member_array[2].members_ = + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, IMUState)(); + if (!SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_type_support_handle.typesupport_identifier) { + SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &SportModeState__rosidl_typesupport_introspection_c__SportModeState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.cpp new file mode 100644 index 0000000..6386bc1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.cpp @@ -0,0 +1,437 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/sport_mode_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void SportModeState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::SportModeState(_init); +} + +void SportModeState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~SportModeState(); +} + +size_t size_function__SportModeState__position(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__SportModeState__position(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeState__position(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeState__velocity(const void * untyped_member) +{ + (void)untyped_member; + return 3; +} + +const void * get_const_function__SportModeState__velocity(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeState__velocity(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeState__range_obstacle(const void * untyped_member) +{ + (void)untyped_member; + return 4; +} + +const void * get_const_function__SportModeState__range_obstacle(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeState__range_obstacle(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeState__foot_force(const void * untyped_member) +{ + (void)untyped_member; + return 4; +} + +const void * get_const_function__SportModeState__foot_force(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeState__foot_force(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeState__foot_position_body(const void * untyped_member) +{ + (void)untyped_member; + return 12; +} + +const void * get_const_function__SportModeState__foot_position_body(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeState__foot_position_body(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__SportModeState__foot_speed_body(const void * untyped_member) +{ + (void)untyped_member; + return 12; +} + +const void * get_const_function__SportModeState__foot_speed_body(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__SportModeState__foot_speed_body(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember SportModeState_message_member_array[15] = { + { + "stamp", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, stamp), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "error_code", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, error_code), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "imu_state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_MESSAGE, // type + 0, // upper bound of string + ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle(), // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, imu_state), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "mode", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, mode), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "progress", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, progress), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "gait_type", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, gait_type), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_raise_height", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, foot_raise_height), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "position", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, position), // bytes offset in struct + nullptr, // default value + size_function__SportModeState__position, // size() function pointer + get_const_function__SportModeState__position, // get_const(index) function pointer + get_function__SportModeState__position, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "body_height", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, body_height), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "velocity", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 3, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, velocity), // bytes offset in struct + nullptr, // default value + size_function__SportModeState__velocity, // size() function pointer + get_const_function__SportModeState__velocity, // get_const(index) function pointer + get_function__SportModeState__velocity, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw_speed", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, yaw_speed), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "range_obstacle", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, range_obstacle), // bytes offset in struct + nullptr, // default value + size_function__SportModeState__range_obstacle, // size() function pointer + get_const_function__SportModeState__range_obstacle, // get_const(index) function pointer + get_function__SportModeState__range_obstacle, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_force", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT16, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 4, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, foot_force), // bytes offset in struct + nullptr, // default value + size_function__SportModeState__foot_force, // size() function pointer + get_const_function__SportModeState__foot_force, // get_const(index) function pointer + get_function__SportModeState__foot_force, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_position_body", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 12, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, foot_position_body), // bytes offset in struct + nullptr, // default value + size_function__SportModeState__foot_position_body, // size() function pointer + get_const_function__SportModeState__foot_position_body, // get_const(index) function pointer + get_function__SportModeState__foot_position_body, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "foot_speed_body", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 12, // array size + false, // is upper bound + offsetof(unitree_go::msg::SportModeState, foot_speed_body), // bytes offset in struct + nullptr, // default value + size_function__SportModeState__foot_speed_body, // size() function pointer + get_const_function__SportModeState__foot_speed_body, // get_const(index) function pointer + get_function__SportModeState__foot_speed_body, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers SportModeState_message_members = { + "unitree_go::msg", // message namespace + "SportModeState", // message name + 15, // number of fields + sizeof(unitree_go::msg::SportModeState), + SportModeState_message_member_array, // message members + SportModeState_init_function, // function to initialize message memory (memory has to be allocated) + SportModeState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t SportModeState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &SportModeState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::SportModeState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, SportModeState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::SportModeState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.h new file mode 100644 index 0000000..c6e4e33 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + SportModeState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.hpp new file mode 100644 index 0000000..529a760 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/sport_mode_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + SportModeState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__SPORT_MODE_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__builder.hpp new file mode 100644 index 0000000..ffe947e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__builder.hpp @@ -0,0 +1,71 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__BUILDER_HPP_ + +#include "unitree_go/msg/detail/time_spec__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_TimeSpec_nanosec +{ +public: + explicit Init_TimeSpec_nanosec(::unitree_go::msg::TimeSpec & msg) + : msg_(msg) + {} + ::unitree_go::msg::TimeSpec nanosec(::unitree_go::msg::TimeSpec::_nanosec_type arg) + { + msg_.nanosec = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::TimeSpec msg_; +}; + +class Init_TimeSpec_sec +{ +public: + Init_TimeSpec_sec() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_TimeSpec_nanosec sec(::unitree_go::msg::TimeSpec::_sec_type arg) + { + msg_.sec = std::move(arg); + return Init_TimeSpec_nanosec(msg_); + } + +private: + ::unitree_go::msg::TimeSpec msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::TimeSpec>() +{ + return unitree_go::msg::builder::Init_TimeSpec_sec(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.c new file mode 100644 index 0000000..4f84c74 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.c @@ -0,0 +1,239 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/time_spec__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__TimeSpec__init(unitree_go__msg__TimeSpec * msg) +{ + if (!msg) { + return false; + } + // sec + // nanosec + return true; +} + +void +unitree_go__msg__TimeSpec__fini(unitree_go__msg__TimeSpec * msg) +{ + if (!msg) { + return; + } + // sec + // nanosec +} + +bool +unitree_go__msg__TimeSpec__are_equal(const unitree_go__msg__TimeSpec * lhs, const unitree_go__msg__TimeSpec * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // sec + if (lhs->sec != rhs->sec) { + return false; + } + // nanosec + if (lhs->nanosec != rhs->nanosec) { + return false; + } + return true; +} + +bool +unitree_go__msg__TimeSpec__copy( + const unitree_go__msg__TimeSpec * input, + unitree_go__msg__TimeSpec * output) +{ + if (!input || !output) { + return false; + } + // sec + output->sec = input->sec; + // nanosec + output->nanosec = input->nanosec; + return true; +} + +unitree_go__msg__TimeSpec * +unitree_go__msg__TimeSpec__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__TimeSpec * msg = (unitree_go__msg__TimeSpec *)allocator.allocate(sizeof(unitree_go__msg__TimeSpec), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__TimeSpec)); + bool success = unitree_go__msg__TimeSpec__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__TimeSpec__destroy(unitree_go__msg__TimeSpec * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__TimeSpec__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__TimeSpec__Sequence__init(unitree_go__msg__TimeSpec__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__TimeSpec * data = NULL; + + if (size) { + data = (unitree_go__msg__TimeSpec *)allocator.zero_allocate(size, sizeof(unitree_go__msg__TimeSpec), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__TimeSpec__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__TimeSpec__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__TimeSpec__Sequence__fini(unitree_go__msg__TimeSpec__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__TimeSpec__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__TimeSpec__Sequence * +unitree_go__msg__TimeSpec__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__TimeSpec__Sequence * array = (unitree_go__msg__TimeSpec__Sequence *)allocator.allocate(sizeof(unitree_go__msg__TimeSpec__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__TimeSpec__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__TimeSpec__Sequence__destroy(unitree_go__msg__TimeSpec__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__TimeSpec__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__TimeSpec__Sequence__are_equal(const unitree_go__msg__TimeSpec__Sequence * lhs, const unitree_go__msg__TimeSpec__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__TimeSpec__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__TimeSpec__Sequence__copy( + const unitree_go__msg__TimeSpec__Sequence * input, + unitree_go__msg__TimeSpec__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__TimeSpec); + unitree_go__msg__TimeSpec * data = + (unitree_go__msg__TimeSpec *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__TimeSpec__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__TimeSpec__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__TimeSpec__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.h new file mode 100644 index 0000000..b563a81 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/time_spec__struct.h" + +/// Initialize msg/TimeSpec message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__TimeSpec + * )) before or use + * unitree_go__msg__TimeSpec__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__TimeSpec__init(unitree_go__msg__TimeSpec * msg); + +/// Finalize msg/TimeSpec message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__TimeSpec__fini(unitree_go__msg__TimeSpec * msg); + +/// Create msg/TimeSpec message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__TimeSpec__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__TimeSpec * +unitree_go__msg__TimeSpec__create(); + +/// Destroy msg/TimeSpec message. +/** + * It calls + * unitree_go__msg__TimeSpec__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__TimeSpec__destroy(unitree_go__msg__TimeSpec * msg); + +/// Check for msg/TimeSpec message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__TimeSpec__are_equal(const unitree_go__msg__TimeSpec * lhs, const unitree_go__msg__TimeSpec * rhs); + +/// Copy a msg/TimeSpec message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__TimeSpec__copy( + const unitree_go__msg__TimeSpec * input, + unitree_go__msg__TimeSpec * output); + +/// Initialize array of msg/TimeSpec messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__TimeSpec__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__TimeSpec__Sequence__init(unitree_go__msg__TimeSpec__Sequence * array, size_t size); + +/// Finalize array of msg/TimeSpec messages. +/** + * It calls + * unitree_go__msg__TimeSpec__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__TimeSpec__Sequence__fini(unitree_go__msg__TimeSpec__Sequence * array); + +/// Create array of msg/TimeSpec messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__TimeSpec__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__TimeSpec__Sequence * +unitree_go__msg__TimeSpec__Sequence__create(size_t size); + +/// Destroy array of msg/TimeSpec messages. +/** + * It calls + * unitree_go__msg__TimeSpec__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__TimeSpec__Sequence__destroy(unitree_go__msg__TimeSpec__Sequence * array); + +/// Check for msg/TimeSpec message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__TimeSpec__Sequence__are_equal(const unitree_go__msg__TimeSpec__Sequence * lhs, const unitree_go__msg__TimeSpec__Sequence * rhs); + +/// Copy an array of msg/TimeSpec messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__TimeSpec__Sequence__copy( + const unitree_go__msg__TimeSpec__Sequence * input, + unitree_go__msg__TimeSpec__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..3196f3c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__TimeSpec( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__TimeSpec( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, TimeSpec)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..b4988b4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/time_spec__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::TimeSpec & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::TimeSpec & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::TimeSpec & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_TimeSpec( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, TimeSpec)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..a30a269 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, TimeSpec)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..7289a13 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, TimeSpec)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.h new file mode 100644 index 0000000..b45f61e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.h @@ -0,0 +1,41 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/TimeSpec in the package unitree_go. +typedef struct unitree_go__msg__TimeSpec +{ + int32_t sec; + uint32_t nanosec; +} unitree_go__msg__TimeSpec; + +// Struct for a sequence of unitree_go__msg__TimeSpec. +typedef struct unitree_go__msg__TimeSpec__Sequence +{ + unitree_go__msg__TimeSpec * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__TimeSpec__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.hpp new file mode 100644 index 0000000..cb9f15b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__struct.hpp @@ -0,0 +1,144 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__TimeSpec __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__TimeSpec __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct TimeSpec_ +{ + using Type = TimeSpec_; + + explicit TimeSpec_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->sec = 0l; + this->nanosec = 0ul; + } + } + + explicit TimeSpec_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->sec = 0l; + this->nanosec = 0ul; + } + } + + // field types and members + using _sec_type = + int32_t; + _sec_type sec; + using _nanosec_type = + uint32_t; + _nanosec_type nanosec; + + // setters for named parameter idiom + Type & set__sec( + const int32_t & _arg) + { + this->sec = _arg; + return *this; + } + Type & set__nanosec( + const uint32_t & _arg) + { + this->nanosec = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::TimeSpec_ *; + using ConstRawPtr = + const unitree_go::msg::TimeSpec_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__TimeSpec + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__TimeSpec + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const TimeSpec_ & other) const + { + if (this->sec != other.sec) { + return false; + } + if (this->nanosec != other.nanosec) { + return false; + } + return true; + } + bool operator!=(const TimeSpec_ & other) const + { + return !this->operator==(other); + } +}; // struct TimeSpec_ + +// alias to use template instance with default allocator +using TimeSpec = + unitree_go::msg::TimeSpec_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__traits.hpp new file mode 100644 index 0000000..80eb861 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__TRAITS_HPP_ + +#include "unitree_go/msg/detail/time_spec__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::TimeSpec"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/TimeSpec"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.c new file mode 100644 index 0000000..d4b9497 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.c @@ -0,0 +1,96 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/time_spec__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/time_spec__functions.h" +#include "unitree_go/msg/detail/time_spec__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__TimeSpec__init(message_memory); +} + +void TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_fini_function(void * message_memory) +{ + unitree_go__msg__TimeSpec__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_member_array[2] = { + { + "sec", // name + rosidl_typesupport_introspection_c__ROS_TYPE_INT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__TimeSpec, sec), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "nanosec", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT32, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__TimeSpec, nanosec), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_members = { + "unitree_go__msg", // message namespace + "TimeSpec", // message name + 2, // number of fields + sizeof(unitree_go__msg__TimeSpec), + TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_member_array, // message members + TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_init_function, // function to initialize message memory (memory has to be allocated) + TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_type_support_handle = { + 0, + &TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, TimeSpec)() { + if (!TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_type_support_handle.typesupport_identifier) { + TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &TimeSpec__rosidl_typesupport_introspection_c__TimeSpec_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.cpp new file mode 100644 index 0000000..9babcb7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.cpp @@ -0,0 +1,122 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/time_spec__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void TimeSpec_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::TimeSpec(_init); +} + +void TimeSpec_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~TimeSpec(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember TimeSpec_message_member_array[2] = { + { + "sec", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::TimeSpec, sec), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "nanosec", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT32, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::TimeSpec, nanosec), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers TimeSpec_message_members = { + "unitree_go::msg", // message namespace + "TimeSpec", // message name + 2, // number of fields + sizeof(unitree_go::msg::TimeSpec), + TimeSpec_message_member_array, // message members + TimeSpec_init_function, // function to initialize message memory (memory has to be allocated) + TimeSpec_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t TimeSpec_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &TimeSpec_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::TimeSpec_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, TimeSpec)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::TimeSpec_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.h new file mode 100644 index 0000000..50d475d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + TimeSpec +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.hpp new file mode 100644 index 0000000..dbe73c7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/time_spec__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__TIME_SPEC__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__TIME_SPEC__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + TimeSpec +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__TIME_SPEC__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__builder.hpp new file mode 100644 index 0000000..267c72e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__builder.hpp @@ -0,0 +1,311 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__BUILDER_HPP_ + +#include "unitree_go/msg/detail/uwb_state__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_UwbState_enabled_from_app +{ +public: + explicit Init_UwbState_enabled_from_app(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + ::unitree_go::msg::UwbState enabled_from_app(::unitree_go::msg::UwbState::_enabled_from_app_type arg) + { + msg_.enabled_from_app = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_buttons +{ +public: + explicit Init_UwbState_buttons(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_enabled_from_app buttons(::unitree_go::msg::UwbState::_buttons_type arg) + { + msg_.buttons = std::move(arg); + return Init_UwbState_enabled_from_app(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_error_state +{ +public: + explicit Init_UwbState_error_state(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_buttons error_state(::unitree_go::msg::UwbState::_error_state_type arg) + { + msg_.error_state = std::move(arg); + return Init_UwbState_buttons(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_joystick +{ +public: + explicit Init_UwbState_joystick(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_error_state joystick(::unitree_go::msg::UwbState::_joystick_type arg) + { + msg_.joystick = std::move(arg); + return Init_UwbState_error_state(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_base_yaw +{ +public: + explicit Init_UwbState_base_yaw(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_joystick base_yaw(::unitree_go::msg::UwbState::_base_yaw_type arg) + { + msg_.base_yaw = std::move(arg); + return Init_UwbState_joystick(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_base_pitch +{ +public: + explicit Init_UwbState_base_pitch(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_base_yaw base_pitch(::unitree_go::msg::UwbState::_base_pitch_type arg) + { + msg_.base_pitch = std::move(arg); + return Init_UwbState_base_yaw(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_base_roll +{ +public: + explicit Init_UwbState_base_roll(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_base_pitch base_roll(::unitree_go::msg::UwbState::_base_roll_type arg) + { + msg_.base_roll = std::move(arg); + return Init_UwbState_base_pitch(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_tag_yaw +{ +public: + explicit Init_UwbState_tag_yaw(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_base_roll tag_yaw(::unitree_go::msg::UwbState::_tag_yaw_type arg) + { + msg_.tag_yaw = std::move(arg); + return Init_UwbState_base_roll(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_tag_pitch +{ +public: + explicit Init_UwbState_tag_pitch(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_tag_yaw tag_pitch(::unitree_go::msg::UwbState::_tag_pitch_type arg) + { + msg_.tag_pitch = std::move(arg); + return Init_UwbState_tag_yaw(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_tag_roll +{ +public: + explicit Init_UwbState_tag_roll(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_tag_pitch tag_roll(::unitree_go::msg::UwbState::_tag_roll_type arg) + { + msg_.tag_roll = std::move(arg); + return Init_UwbState_tag_pitch(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_yaw_est +{ +public: + explicit Init_UwbState_yaw_est(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_tag_roll yaw_est(::unitree_go::msg::UwbState::_yaw_est_type arg) + { + msg_.yaw_est = std::move(arg); + return Init_UwbState_tag_roll(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_distance_est +{ +public: + explicit Init_UwbState_distance_est(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_yaw_est distance_est(::unitree_go::msg::UwbState::_distance_est_type arg) + { + msg_.distance_est = std::move(arg); + return Init_UwbState_yaw_est(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_pitch_est +{ +public: + explicit Init_UwbState_pitch_est(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_distance_est pitch_est(::unitree_go::msg::UwbState::_pitch_est_type arg) + { + msg_.pitch_est = std::move(arg); + return Init_UwbState_distance_est(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_orientation_est +{ +public: + explicit Init_UwbState_orientation_est(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_pitch_est orientation_est(::unitree_go::msg::UwbState::_orientation_est_type arg) + { + msg_.orientation_est = std::move(arg); + return Init_UwbState_pitch_est(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_joy_mode +{ +public: + explicit Init_UwbState_joy_mode(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_orientation_est joy_mode(::unitree_go::msg::UwbState::_joy_mode_type arg) + { + msg_.joy_mode = std::move(arg); + return Init_UwbState_orientation_est(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_channel +{ +public: + explicit Init_UwbState_channel(::unitree_go::msg::UwbState & msg) + : msg_(msg) + {} + Init_UwbState_joy_mode channel(::unitree_go::msg::UwbState::_channel_type arg) + { + msg_.channel = std::move(arg); + return Init_UwbState_joy_mode(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +class Init_UwbState_version +{ +public: + Init_UwbState_version() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_UwbState_channel version(::unitree_go::msg::UwbState::_version_type arg) + { + msg_.version = std::move(arg); + return Init_UwbState_channel(msg_); + } + +private: + ::unitree_go::msg::UwbState msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::UwbState>() +{ + return unitree_go::msg::builder::Init_UwbState_version(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.c new file mode 100644 index 0000000..5479884 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.c @@ -0,0 +1,367 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/uwb_state__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__UwbState__init(unitree_go__msg__UwbState * msg) +{ + if (!msg) { + return false; + } + // version + // channel + // joy_mode + // orientation_est + // pitch_est + // distance_est + // yaw_est + // tag_roll + // tag_pitch + // tag_yaw + // base_roll + // base_pitch + // base_yaw + // joystick + // error_state + // buttons + // enabled_from_app + return true; +} + +void +unitree_go__msg__UwbState__fini(unitree_go__msg__UwbState * msg) +{ + if (!msg) { + return; + } + // version + // channel + // joy_mode + // orientation_est + // pitch_est + // distance_est + // yaw_est + // tag_roll + // tag_pitch + // tag_yaw + // base_roll + // base_pitch + // base_yaw + // joystick + // error_state + // buttons + // enabled_from_app +} + +bool +unitree_go__msg__UwbState__are_equal(const unitree_go__msg__UwbState * lhs, const unitree_go__msg__UwbState * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // version + for (size_t i = 0; i < 2; ++i) { + if (lhs->version[i] != rhs->version[i]) { + return false; + } + } + // channel + if (lhs->channel != rhs->channel) { + return false; + } + // joy_mode + if (lhs->joy_mode != rhs->joy_mode) { + return false; + } + // orientation_est + if (lhs->orientation_est != rhs->orientation_est) { + return false; + } + // pitch_est + if (lhs->pitch_est != rhs->pitch_est) { + return false; + } + // distance_est + if (lhs->distance_est != rhs->distance_est) { + return false; + } + // yaw_est + if (lhs->yaw_est != rhs->yaw_est) { + return false; + } + // tag_roll + if (lhs->tag_roll != rhs->tag_roll) { + return false; + } + // tag_pitch + if (lhs->tag_pitch != rhs->tag_pitch) { + return false; + } + // tag_yaw + if (lhs->tag_yaw != rhs->tag_yaw) { + return false; + } + // base_roll + if (lhs->base_roll != rhs->base_roll) { + return false; + } + // base_pitch + if (lhs->base_pitch != rhs->base_pitch) { + return false; + } + // base_yaw + if (lhs->base_yaw != rhs->base_yaw) { + return false; + } + // joystick + for (size_t i = 0; i < 2; ++i) { + if (lhs->joystick[i] != rhs->joystick[i]) { + return false; + } + } + // error_state + if (lhs->error_state != rhs->error_state) { + return false; + } + // buttons + if (lhs->buttons != rhs->buttons) { + return false; + } + // enabled_from_app + if (lhs->enabled_from_app != rhs->enabled_from_app) { + return false; + } + return true; +} + +bool +unitree_go__msg__UwbState__copy( + const unitree_go__msg__UwbState * input, + unitree_go__msg__UwbState * output) +{ + if (!input || !output) { + return false; + } + // version + for (size_t i = 0; i < 2; ++i) { + output->version[i] = input->version[i]; + } + // channel + output->channel = input->channel; + // joy_mode + output->joy_mode = input->joy_mode; + // orientation_est + output->orientation_est = input->orientation_est; + // pitch_est + output->pitch_est = input->pitch_est; + // distance_est + output->distance_est = input->distance_est; + // yaw_est + output->yaw_est = input->yaw_est; + // tag_roll + output->tag_roll = input->tag_roll; + // tag_pitch + output->tag_pitch = input->tag_pitch; + // tag_yaw + output->tag_yaw = input->tag_yaw; + // base_roll + output->base_roll = input->base_roll; + // base_pitch + output->base_pitch = input->base_pitch; + // base_yaw + output->base_yaw = input->base_yaw; + // joystick + for (size_t i = 0; i < 2; ++i) { + output->joystick[i] = input->joystick[i]; + } + // error_state + output->error_state = input->error_state; + // buttons + output->buttons = input->buttons; + // enabled_from_app + output->enabled_from_app = input->enabled_from_app; + return true; +} + +unitree_go__msg__UwbState * +unitree_go__msg__UwbState__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__UwbState * msg = (unitree_go__msg__UwbState *)allocator.allocate(sizeof(unitree_go__msg__UwbState), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__UwbState)); + bool success = unitree_go__msg__UwbState__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__UwbState__destroy(unitree_go__msg__UwbState * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__UwbState__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__UwbState__Sequence__init(unitree_go__msg__UwbState__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__UwbState * data = NULL; + + if (size) { + data = (unitree_go__msg__UwbState *)allocator.zero_allocate(size, sizeof(unitree_go__msg__UwbState), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__UwbState__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__UwbState__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__UwbState__Sequence__fini(unitree_go__msg__UwbState__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__UwbState__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__UwbState__Sequence * +unitree_go__msg__UwbState__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__UwbState__Sequence * array = (unitree_go__msg__UwbState__Sequence *)allocator.allocate(sizeof(unitree_go__msg__UwbState__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__UwbState__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__UwbState__Sequence__destroy(unitree_go__msg__UwbState__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__UwbState__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__UwbState__Sequence__are_equal(const unitree_go__msg__UwbState__Sequence * lhs, const unitree_go__msg__UwbState__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__UwbState__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__UwbState__Sequence__copy( + const unitree_go__msg__UwbState__Sequence * input, + unitree_go__msg__UwbState__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__UwbState); + unitree_go__msg__UwbState * data = + (unitree_go__msg__UwbState *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__UwbState__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__UwbState__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__UwbState__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.h new file mode 100644 index 0000000..5e5eeed --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/uwb_state__struct.h" + +/// Initialize msg/UwbState message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__UwbState + * )) before or use + * unitree_go__msg__UwbState__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbState__init(unitree_go__msg__UwbState * msg); + +/// Finalize msg/UwbState message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbState__fini(unitree_go__msg__UwbState * msg); + +/// Create msg/UwbState message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__UwbState__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__UwbState * +unitree_go__msg__UwbState__create(); + +/// Destroy msg/UwbState message. +/** + * It calls + * unitree_go__msg__UwbState__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbState__destroy(unitree_go__msg__UwbState * msg); + +/// Check for msg/UwbState message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbState__are_equal(const unitree_go__msg__UwbState * lhs, const unitree_go__msg__UwbState * rhs); + +/// Copy a msg/UwbState message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbState__copy( + const unitree_go__msg__UwbState * input, + unitree_go__msg__UwbState * output); + +/// Initialize array of msg/UwbState messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__UwbState__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbState__Sequence__init(unitree_go__msg__UwbState__Sequence * array, size_t size); + +/// Finalize array of msg/UwbState messages. +/** + * It calls + * unitree_go__msg__UwbState__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbState__Sequence__fini(unitree_go__msg__UwbState__Sequence * array); + +/// Create array of msg/UwbState messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__UwbState__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__UwbState__Sequence * +unitree_go__msg__UwbState__Sequence__create(size_t size); + +/// Destroy array of msg/UwbState messages. +/** + * It calls + * unitree_go__msg__UwbState__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbState__Sequence__destroy(unitree_go__msg__UwbState__Sequence * array); + +/// Check for msg/UwbState message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbState__Sequence__are_equal(const unitree_go__msg__UwbState__Sequence * lhs, const unitree_go__msg__UwbState__Sequence * rhs); + +/// Copy an array of msg/UwbState messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbState__Sequence__copy( + const unitree_go__msg__UwbState__Sequence * input, + unitree_go__msg__UwbState__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..b17eaef --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__UwbState( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__UwbState( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, UwbState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..710fd84 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/uwb_state__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::UwbState & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::UwbState & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::UwbState & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_UwbState( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, UwbState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..efe19ed --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, UwbState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..bfd599d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, UwbState)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.h new file mode 100644 index 0000000..406e537 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.h @@ -0,0 +1,56 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/UwbState in the package unitree_go. +typedef struct unitree_go__msg__UwbState +{ + uint8_t version[2]; + uint8_t channel; + uint8_t joy_mode; + float orientation_est; + float pitch_est; + float distance_est; + float yaw_est; + float tag_roll; + float tag_pitch; + float tag_yaw; + float base_roll; + float base_pitch; + float base_yaw; + float joystick[2]; + uint8_t error_state; + uint8_t buttons; + uint8_t enabled_from_app; +} unitree_go__msg__UwbState; + +// Struct for a sequence of unitree_go__msg__UwbState. +typedef struct unitree_go__msg__UwbState__Sequence +{ + unitree_go__msg__UwbState * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__UwbState__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.hpp new file mode 100644 index 0000000..0d63dc7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__struct.hpp @@ -0,0 +1,355 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__UwbState __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__UwbState __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct UwbState_ +{ + using Type = UwbState_; + + explicit UwbState_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, uint8_t>(this->version.begin(), this->version.end(), 0); + this->channel = 0; + this->joy_mode = 0; + this->orientation_est = 0.0f; + this->pitch_est = 0.0f; + this->distance_est = 0.0f; + this->yaw_est = 0.0f; + this->tag_roll = 0.0f; + this->tag_pitch = 0.0f; + this->tag_yaw = 0.0f; + this->base_roll = 0.0f; + this->base_pitch = 0.0f; + this->base_yaw = 0.0f; + std::fill::iterator, float>(this->joystick.begin(), this->joystick.end(), 0.0f); + this->error_state = 0; + this->buttons = 0; + this->enabled_from_app = 0; + } + } + + explicit UwbState_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + : version(_alloc), + joystick(_alloc) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + std::fill::iterator, uint8_t>(this->version.begin(), this->version.end(), 0); + this->channel = 0; + this->joy_mode = 0; + this->orientation_est = 0.0f; + this->pitch_est = 0.0f; + this->distance_est = 0.0f; + this->yaw_est = 0.0f; + this->tag_roll = 0.0f; + this->tag_pitch = 0.0f; + this->tag_yaw = 0.0f; + this->base_roll = 0.0f; + this->base_pitch = 0.0f; + this->base_yaw = 0.0f; + std::fill::iterator, float>(this->joystick.begin(), this->joystick.end(), 0.0f); + this->error_state = 0; + this->buttons = 0; + this->enabled_from_app = 0; + } + } + + // field types and members + using _version_type = + std::array; + _version_type version; + using _channel_type = + uint8_t; + _channel_type channel; + using _joy_mode_type = + uint8_t; + _joy_mode_type joy_mode; + using _orientation_est_type = + float; + _orientation_est_type orientation_est; + using _pitch_est_type = + float; + _pitch_est_type pitch_est; + using _distance_est_type = + float; + _distance_est_type distance_est; + using _yaw_est_type = + float; + _yaw_est_type yaw_est; + using _tag_roll_type = + float; + _tag_roll_type tag_roll; + using _tag_pitch_type = + float; + _tag_pitch_type tag_pitch; + using _tag_yaw_type = + float; + _tag_yaw_type tag_yaw; + using _base_roll_type = + float; + _base_roll_type base_roll; + using _base_pitch_type = + float; + _base_pitch_type base_pitch; + using _base_yaw_type = + float; + _base_yaw_type base_yaw; + using _joystick_type = + std::array; + _joystick_type joystick; + using _error_state_type = + uint8_t; + _error_state_type error_state; + using _buttons_type = + uint8_t; + _buttons_type buttons; + using _enabled_from_app_type = + uint8_t; + _enabled_from_app_type enabled_from_app; + + // setters for named parameter idiom + Type & set__version( + const std::array & _arg) + { + this->version = _arg; + return *this; + } + Type & set__channel( + const uint8_t & _arg) + { + this->channel = _arg; + return *this; + } + Type & set__joy_mode( + const uint8_t & _arg) + { + this->joy_mode = _arg; + return *this; + } + Type & set__orientation_est( + const float & _arg) + { + this->orientation_est = _arg; + return *this; + } + Type & set__pitch_est( + const float & _arg) + { + this->pitch_est = _arg; + return *this; + } + Type & set__distance_est( + const float & _arg) + { + this->distance_est = _arg; + return *this; + } + Type & set__yaw_est( + const float & _arg) + { + this->yaw_est = _arg; + return *this; + } + Type & set__tag_roll( + const float & _arg) + { + this->tag_roll = _arg; + return *this; + } + Type & set__tag_pitch( + const float & _arg) + { + this->tag_pitch = _arg; + return *this; + } + Type & set__tag_yaw( + const float & _arg) + { + this->tag_yaw = _arg; + return *this; + } + Type & set__base_roll( + const float & _arg) + { + this->base_roll = _arg; + return *this; + } + Type & set__base_pitch( + const float & _arg) + { + this->base_pitch = _arg; + return *this; + } + Type & set__base_yaw( + const float & _arg) + { + this->base_yaw = _arg; + return *this; + } + Type & set__joystick( + const std::array & _arg) + { + this->joystick = _arg; + return *this; + } + Type & set__error_state( + const uint8_t & _arg) + { + this->error_state = _arg; + return *this; + } + Type & set__buttons( + const uint8_t & _arg) + { + this->buttons = _arg; + return *this; + } + Type & set__enabled_from_app( + const uint8_t & _arg) + { + this->enabled_from_app = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::UwbState_ *; + using ConstRawPtr = + const unitree_go::msg::UwbState_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__UwbState + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__UwbState + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const UwbState_ & other) const + { + if (this->version != other.version) { + return false; + } + if (this->channel != other.channel) { + return false; + } + if (this->joy_mode != other.joy_mode) { + return false; + } + if (this->orientation_est != other.orientation_est) { + return false; + } + if (this->pitch_est != other.pitch_est) { + return false; + } + if (this->distance_est != other.distance_est) { + return false; + } + if (this->yaw_est != other.yaw_est) { + return false; + } + if (this->tag_roll != other.tag_roll) { + return false; + } + if (this->tag_pitch != other.tag_pitch) { + return false; + } + if (this->tag_yaw != other.tag_yaw) { + return false; + } + if (this->base_roll != other.base_roll) { + return false; + } + if (this->base_pitch != other.base_pitch) { + return false; + } + if (this->base_yaw != other.base_yaw) { + return false; + } + if (this->joystick != other.joystick) { + return false; + } + if (this->error_state != other.error_state) { + return false; + } + if (this->buttons != other.buttons) { + return false; + } + if (this->enabled_from_app != other.enabled_from_app) { + return false; + } + return true; + } + bool operator!=(const UwbState_ & other) const + { + return !this->operator==(other); + } +}; // struct UwbState_ + +// alias to use template instance with default allocator +using UwbState = + unitree_go::msg::UwbState_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__traits.hpp new file mode 100644 index 0000000..cc7b0cd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__TRAITS_HPP_ + +#include "unitree_go/msg/detail/uwb_state__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::UwbState"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/UwbState"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.c new file mode 100644 index 0000000..79ba49b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.c @@ -0,0 +1,321 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/uwb_state__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/uwb_state__functions.h" +#include "unitree_go/msg/detail/uwb_state__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void UwbState__rosidl_typesupport_introspection_c__UwbState_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__UwbState__init(message_memory); +} + +void UwbState__rosidl_typesupport_introspection_c__UwbState_fini_function(void * message_memory) +{ + unitree_go__msg__UwbState__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember UwbState__rosidl_typesupport_introspection_c__UwbState_message_member_array[17] = { + { + "version", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, version), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "channel", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, channel), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "joy_mode", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, joy_mode), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "orientation_est", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, orientation_est), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "pitch_est", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, pitch_est), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "distance_est", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, distance_est), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "yaw_est", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, yaw_est), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "tag_roll", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, tag_roll), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "tag_pitch", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, tag_pitch), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "tag_yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, tag_yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "base_roll", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, base_roll), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "base_pitch", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, base_pitch), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "base_yaw", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, base_yaw), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "joystick", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, joystick), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "error_state", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, error_state), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "buttons", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, buttons), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "enabled_from_app", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbState, enabled_from_app), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers UwbState__rosidl_typesupport_introspection_c__UwbState_message_members = { + "unitree_go__msg", // message namespace + "UwbState", // message name + 17, // number of fields + sizeof(unitree_go__msg__UwbState), + UwbState__rosidl_typesupport_introspection_c__UwbState_message_member_array, // message members + UwbState__rosidl_typesupport_introspection_c__UwbState_init_function, // function to initialize message memory (memory has to be allocated) + UwbState__rosidl_typesupport_introspection_c__UwbState_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t UwbState__rosidl_typesupport_introspection_c__UwbState_message_type_support_handle = { + 0, + &UwbState__rosidl_typesupport_introspection_c__UwbState_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, UwbState)() { + if (!UwbState__rosidl_typesupport_introspection_c__UwbState_message_type_support_handle.typesupport_identifier) { + UwbState__rosidl_typesupport_introspection_c__UwbState_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &UwbState__rosidl_typesupport_introspection_c__UwbState_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.cpp new file mode 100644 index 0000000..ef785d2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.cpp @@ -0,0 +1,387 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/uwb_state__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void UwbState_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::UwbState(_init); +} + +void UwbState_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~UwbState(); +} + +size_t size_function__UwbState__version(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__UwbState__version(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__UwbState__version(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +size_t size_function__UwbState__joystick(const void * untyped_member) +{ + (void)untyped_member; + return 2; +} + +const void * get_const_function__UwbState__joystick(const void * untyped_member, size_t index) +{ + const auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +void * get_function__UwbState__joystick(void * untyped_member, size_t index) +{ + auto & member = + *reinterpret_cast *>(untyped_member); + return &member[index]; +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember UwbState_message_member_array[17] = { + { + "version", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, version), // bytes offset in struct + nullptr, // default value + size_function__UwbState__version, // size() function pointer + get_const_function__UwbState__version, // get_const(index) function pointer + get_function__UwbState__version, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "channel", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, channel), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "joy_mode", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, joy_mode), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "orientation_est", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, orientation_est), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "pitch_est", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, pitch_est), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "distance_est", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, distance_est), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "yaw_est", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, yaw_est), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "tag_roll", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, tag_roll), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "tag_pitch", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, tag_pitch), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "tag_yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, tag_yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "base_roll", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, base_roll), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "base_pitch", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, base_pitch), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "base_yaw", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, base_yaw), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "joystick", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + true, // is array + 2, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, joystick), // bytes offset in struct + nullptr, // default value + size_function__UwbState__joystick, // size() function pointer + get_const_function__UwbState__joystick, // get_const(index) function pointer + get_function__UwbState__joystick, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "error_state", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, error_state), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "buttons", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, buttons), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "enabled_from_app", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbState, enabled_from_app), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers UwbState_message_members = { + "unitree_go::msg", // message namespace + "UwbState", // message name + 17, // number of fields + sizeof(unitree_go::msg::UwbState), + UwbState_message_member_array, // message members + UwbState_init_function, // function to initialize message memory (memory has to be allocated) + UwbState_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t UwbState_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &UwbState_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::UwbState_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, UwbState)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::UwbState_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.h new file mode 100644 index 0000000..edda64e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + UwbState +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.hpp new file mode 100644 index 0000000..c2bdb62 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_state__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_STATE__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_STATE__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + UwbState +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_STATE__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__builder.hpp new file mode 100644 index 0000000..9f6dc91 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__builder.hpp @@ -0,0 +1,55 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__BUILDER_HPP_ + +#include "unitree_go/msg/detail/uwb_switch__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_UwbSwitch_enabled +{ +public: + Init_UwbSwitch_enabled() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + ::unitree_go::msg::UwbSwitch enabled(::unitree_go::msg::UwbSwitch::_enabled_type arg) + { + msg_.enabled = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::UwbSwitch msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::UwbSwitch>() +{ + return unitree_go::msg::builder::Init_UwbSwitch_enabled(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.c new file mode 100644 index 0000000..de538ba --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.c @@ -0,0 +1,231 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/uwb_switch__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__UwbSwitch__init(unitree_go__msg__UwbSwitch * msg) +{ + if (!msg) { + return false; + } + // enabled + return true; +} + +void +unitree_go__msg__UwbSwitch__fini(unitree_go__msg__UwbSwitch * msg) +{ + if (!msg) { + return; + } + // enabled +} + +bool +unitree_go__msg__UwbSwitch__are_equal(const unitree_go__msg__UwbSwitch * lhs, const unitree_go__msg__UwbSwitch * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // enabled + if (lhs->enabled != rhs->enabled) { + return false; + } + return true; +} + +bool +unitree_go__msg__UwbSwitch__copy( + const unitree_go__msg__UwbSwitch * input, + unitree_go__msg__UwbSwitch * output) +{ + if (!input || !output) { + return false; + } + // enabled + output->enabled = input->enabled; + return true; +} + +unitree_go__msg__UwbSwitch * +unitree_go__msg__UwbSwitch__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__UwbSwitch * msg = (unitree_go__msg__UwbSwitch *)allocator.allocate(sizeof(unitree_go__msg__UwbSwitch), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__UwbSwitch)); + bool success = unitree_go__msg__UwbSwitch__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__UwbSwitch__destroy(unitree_go__msg__UwbSwitch * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__UwbSwitch__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__UwbSwitch__Sequence__init(unitree_go__msg__UwbSwitch__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__UwbSwitch * data = NULL; + + if (size) { + data = (unitree_go__msg__UwbSwitch *)allocator.zero_allocate(size, sizeof(unitree_go__msg__UwbSwitch), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__UwbSwitch__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__UwbSwitch__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__UwbSwitch__Sequence__fini(unitree_go__msg__UwbSwitch__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__UwbSwitch__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__UwbSwitch__Sequence * +unitree_go__msg__UwbSwitch__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__UwbSwitch__Sequence * array = (unitree_go__msg__UwbSwitch__Sequence *)allocator.allocate(sizeof(unitree_go__msg__UwbSwitch__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__UwbSwitch__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__UwbSwitch__Sequence__destroy(unitree_go__msg__UwbSwitch__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__UwbSwitch__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__UwbSwitch__Sequence__are_equal(const unitree_go__msg__UwbSwitch__Sequence * lhs, const unitree_go__msg__UwbSwitch__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__UwbSwitch__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__UwbSwitch__Sequence__copy( + const unitree_go__msg__UwbSwitch__Sequence * input, + unitree_go__msg__UwbSwitch__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__UwbSwitch); + unitree_go__msg__UwbSwitch * data = + (unitree_go__msg__UwbSwitch *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__UwbSwitch__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__UwbSwitch__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__UwbSwitch__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.h new file mode 100644 index 0000000..03b8a4f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/uwb_switch__struct.h" + +/// Initialize msg/UwbSwitch message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__UwbSwitch + * )) before or use + * unitree_go__msg__UwbSwitch__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbSwitch__init(unitree_go__msg__UwbSwitch * msg); + +/// Finalize msg/UwbSwitch message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbSwitch__fini(unitree_go__msg__UwbSwitch * msg); + +/// Create msg/UwbSwitch message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__UwbSwitch__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__UwbSwitch * +unitree_go__msg__UwbSwitch__create(); + +/// Destroy msg/UwbSwitch message. +/** + * It calls + * unitree_go__msg__UwbSwitch__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbSwitch__destroy(unitree_go__msg__UwbSwitch * msg); + +/// Check for msg/UwbSwitch message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbSwitch__are_equal(const unitree_go__msg__UwbSwitch * lhs, const unitree_go__msg__UwbSwitch * rhs); + +/// Copy a msg/UwbSwitch message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbSwitch__copy( + const unitree_go__msg__UwbSwitch * input, + unitree_go__msg__UwbSwitch * output); + +/// Initialize array of msg/UwbSwitch messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__UwbSwitch__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbSwitch__Sequence__init(unitree_go__msg__UwbSwitch__Sequence * array, size_t size); + +/// Finalize array of msg/UwbSwitch messages. +/** + * It calls + * unitree_go__msg__UwbSwitch__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbSwitch__Sequence__fini(unitree_go__msg__UwbSwitch__Sequence * array); + +/// Create array of msg/UwbSwitch messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__UwbSwitch__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__UwbSwitch__Sequence * +unitree_go__msg__UwbSwitch__Sequence__create(size_t size); + +/// Destroy array of msg/UwbSwitch messages. +/** + * It calls + * unitree_go__msg__UwbSwitch__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__UwbSwitch__Sequence__destroy(unitree_go__msg__UwbSwitch__Sequence * array); + +/// Check for msg/UwbSwitch message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbSwitch__Sequence__are_equal(const unitree_go__msg__UwbSwitch__Sequence * lhs, const unitree_go__msg__UwbSwitch__Sequence * rhs); + +/// Copy an array of msg/UwbSwitch messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__UwbSwitch__Sequence__copy( + const unitree_go__msg__UwbSwitch__Sequence * input, + unitree_go__msg__UwbSwitch__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..dd73301 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__UwbSwitch( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__UwbSwitch( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, UwbSwitch)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..e361630 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/uwb_switch__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::UwbSwitch & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::UwbSwitch & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::UwbSwitch & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_UwbSwitch( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, UwbSwitch)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..dfd5ad9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, UwbSwitch)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..3a61be8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, UwbSwitch)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.h new file mode 100644 index 0000000..5ef47e3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.h @@ -0,0 +1,40 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/UwbSwitch in the package unitree_go. +typedef struct unitree_go__msg__UwbSwitch +{ + uint8_t enabled; +} unitree_go__msg__UwbSwitch; + +// Struct for a sequence of unitree_go__msg__UwbSwitch. +typedef struct unitree_go__msg__UwbSwitch__Sequence +{ + unitree_go__msg__UwbSwitch * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__UwbSwitch__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.hpp new file mode 100644 index 0000000..53687e1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__struct.hpp @@ -0,0 +1,130 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__UwbSwitch __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__UwbSwitch __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct UwbSwitch_ +{ + using Type = UwbSwitch_; + + explicit UwbSwitch_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->enabled = 0; + } + } + + explicit UwbSwitch_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->enabled = 0; + } + } + + // field types and members + using _enabled_type = + uint8_t; + _enabled_type enabled; + + // setters for named parameter idiom + Type & set__enabled( + const uint8_t & _arg) + { + this->enabled = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::UwbSwitch_ *; + using ConstRawPtr = + const unitree_go::msg::UwbSwitch_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__UwbSwitch + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__UwbSwitch + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const UwbSwitch_ & other) const + { + if (this->enabled != other.enabled) { + return false; + } + return true; + } + bool operator!=(const UwbSwitch_ & other) const + { + return !this->operator==(other); + } +}; // struct UwbSwitch_ + +// alias to use template instance with default allocator +using UwbSwitch = + unitree_go::msg::UwbSwitch_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__traits.hpp new file mode 100644 index 0000000..c7a7d65 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TRAITS_HPP_ + +#include "unitree_go/msg/detail/uwb_switch__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::UwbSwitch"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/UwbSwitch"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.c new file mode 100644 index 0000000..19a4eb9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.c @@ -0,0 +1,81 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/uwb_switch__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/uwb_switch__functions.h" +#include "unitree_go/msg/detail/uwb_switch__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__UwbSwitch__init(message_memory); +} + +void UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_fini_function(void * message_memory) +{ + unitree_go__msg__UwbSwitch__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_member_array[1] = { + { + "enabled", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT8, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__UwbSwitch, enabled), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_members = { + "unitree_go__msg", // message namespace + "UwbSwitch", // message name + 1, // number of fields + sizeof(unitree_go__msg__UwbSwitch), + UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_member_array, // message members + UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_init_function, // function to initialize message memory (memory has to be allocated) + UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_type_support_handle = { + 0, + &UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, UwbSwitch)() { + if (!UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_type_support_handle.typesupport_identifier) { + UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &UwbSwitch__rosidl_typesupport_introspection_c__UwbSwitch_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.cpp new file mode 100644 index 0000000..655a906 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.cpp @@ -0,0 +1,107 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/uwb_switch__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void UwbSwitch_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::UwbSwitch(_init); +} + +void UwbSwitch_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~UwbSwitch(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember UwbSwitch_message_member_array[1] = { + { + "enabled", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT8, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::UwbSwitch, enabled), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers UwbSwitch_message_members = { + "unitree_go::msg", // message namespace + "UwbSwitch", // message name + 1, // number of fields + sizeof(unitree_go::msg::UwbSwitch), + UwbSwitch_message_member_array, // message members + UwbSwitch_init_function, // function to initialize message memory (memory has to be allocated) + UwbSwitch_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t UwbSwitch_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &UwbSwitch_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::UwbSwitch_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, UwbSwitch)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::UwbSwitch_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.h new file mode 100644 index 0000000..5e0c51d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + UwbSwitch +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.hpp new file mode 100644 index 0000000..6a267cc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/uwb_switch__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + UwbSwitch +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__UWB_SWITCH__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__builder.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__builder.hpp new file mode 100644 index 0000000..66ec9e5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__builder.hpp @@ -0,0 +1,119 @@ +// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__BUILDER_HPP_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__BUILDER_HPP_ + +#include "unitree_go/msg/detail/wireless_controller__struct.hpp" +#include +#include +#include + + +namespace unitree_go +{ + +namespace msg +{ + +namespace builder +{ + +class Init_WirelessController_keys +{ +public: + explicit Init_WirelessController_keys(::unitree_go::msg::WirelessController & msg) + : msg_(msg) + {} + ::unitree_go::msg::WirelessController keys(::unitree_go::msg::WirelessController::_keys_type arg) + { + msg_.keys = std::move(arg); + return std::move(msg_); + } + +private: + ::unitree_go::msg::WirelessController msg_; +}; + +class Init_WirelessController_ry +{ +public: + explicit Init_WirelessController_ry(::unitree_go::msg::WirelessController & msg) + : msg_(msg) + {} + Init_WirelessController_keys ry(::unitree_go::msg::WirelessController::_ry_type arg) + { + msg_.ry = std::move(arg); + return Init_WirelessController_keys(msg_); + } + +private: + ::unitree_go::msg::WirelessController msg_; +}; + +class Init_WirelessController_rx +{ +public: + explicit Init_WirelessController_rx(::unitree_go::msg::WirelessController & msg) + : msg_(msg) + {} + Init_WirelessController_ry rx(::unitree_go::msg::WirelessController::_rx_type arg) + { + msg_.rx = std::move(arg); + return Init_WirelessController_ry(msg_); + } + +private: + ::unitree_go::msg::WirelessController msg_; +}; + +class Init_WirelessController_ly +{ +public: + explicit Init_WirelessController_ly(::unitree_go::msg::WirelessController & msg) + : msg_(msg) + {} + Init_WirelessController_rx ly(::unitree_go::msg::WirelessController::_ly_type arg) + { + msg_.ly = std::move(arg); + return Init_WirelessController_rx(msg_); + } + +private: + ::unitree_go::msg::WirelessController msg_; +}; + +class Init_WirelessController_lx +{ +public: + Init_WirelessController_lx() + : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP) + {} + Init_WirelessController_ly lx(::unitree_go::msg::WirelessController::_lx_type arg) + { + msg_.lx = std::move(arg); + return Init_WirelessController_ly(msg_); + } + +private: + ::unitree_go::msg::WirelessController msg_; +}; + +} // namespace builder + +} // namespace msg + +template +auto build(); + +template<> +inline +auto build<::unitree_go::msg::WirelessController>() +{ + return unitree_go::msg::builder::Init_WirelessController_lx(); +} + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__BUILDER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.c new file mode 100644 index 0000000..24d212f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.c @@ -0,0 +1,263 @@ +// generated from rosidl_generator_c/resource/idl__functions.c.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/detail/wireless_controller__functions.h" + +#include +#include +#include +#include + +#include "rcutils/allocator.h" + + +bool +unitree_go__msg__WirelessController__init(unitree_go__msg__WirelessController * msg) +{ + if (!msg) { + return false; + } + // lx + // ly + // rx + // ry + // keys + return true; +} + +void +unitree_go__msg__WirelessController__fini(unitree_go__msg__WirelessController * msg) +{ + if (!msg) { + return; + } + // lx + // ly + // rx + // ry + // keys +} + +bool +unitree_go__msg__WirelessController__are_equal(const unitree_go__msg__WirelessController * lhs, const unitree_go__msg__WirelessController * rhs) +{ + if (!lhs || !rhs) { + return false; + } + // lx + if (lhs->lx != rhs->lx) { + return false; + } + // ly + if (lhs->ly != rhs->ly) { + return false; + } + // rx + if (lhs->rx != rhs->rx) { + return false; + } + // ry + if (lhs->ry != rhs->ry) { + return false; + } + // keys + if (lhs->keys != rhs->keys) { + return false; + } + return true; +} + +bool +unitree_go__msg__WirelessController__copy( + const unitree_go__msg__WirelessController * input, + unitree_go__msg__WirelessController * output) +{ + if (!input || !output) { + return false; + } + // lx + output->lx = input->lx; + // ly + output->ly = input->ly; + // rx + output->rx = input->rx; + // ry + output->ry = input->ry; + // keys + output->keys = input->keys; + return true; +} + +unitree_go__msg__WirelessController * +unitree_go__msg__WirelessController__create() +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__WirelessController * msg = (unitree_go__msg__WirelessController *)allocator.allocate(sizeof(unitree_go__msg__WirelessController), allocator.state); + if (!msg) { + return NULL; + } + memset(msg, 0, sizeof(unitree_go__msg__WirelessController)); + bool success = unitree_go__msg__WirelessController__init(msg); + if (!success) { + allocator.deallocate(msg, allocator.state); + return NULL; + } + return msg; +} + +void +unitree_go__msg__WirelessController__destroy(unitree_go__msg__WirelessController * msg) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (msg) { + unitree_go__msg__WirelessController__fini(msg); + } + allocator.deallocate(msg, allocator.state); +} + + +bool +unitree_go__msg__WirelessController__Sequence__init(unitree_go__msg__WirelessController__Sequence * array, size_t size) +{ + if (!array) { + return false; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__WirelessController * data = NULL; + + if (size) { + data = (unitree_go__msg__WirelessController *)allocator.zero_allocate(size, sizeof(unitree_go__msg__WirelessController), allocator.state); + if (!data) { + return false; + } + // initialize all array elements + size_t i; + for (i = 0; i < size; ++i) { + bool success = unitree_go__msg__WirelessController__init(&data[i]); + if (!success) { + break; + } + } + if (i < size) { + // if initialization failed finalize the already initialized array elements + for (; i > 0; --i) { + unitree_go__msg__WirelessController__fini(&data[i - 1]); + } + allocator.deallocate(data, allocator.state); + return false; + } + } + array->data = data; + array->size = size; + array->capacity = size; + return true; +} + +void +unitree_go__msg__WirelessController__Sequence__fini(unitree_go__msg__WirelessController__Sequence * array) +{ + if (!array) { + return; + } + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + + if (array->data) { + // ensure that data and capacity values are consistent + assert(array->capacity > 0); + // finalize all array elements + for (size_t i = 0; i < array->capacity; ++i) { + unitree_go__msg__WirelessController__fini(&array->data[i]); + } + allocator.deallocate(array->data, allocator.state); + array->data = NULL; + array->size = 0; + array->capacity = 0; + } else { + // ensure that data, size, and capacity values are consistent + assert(0 == array->size); + assert(0 == array->capacity); + } +} + +unitree_go__msg__WirelessController__Sequence * +unitree_go__msg__WirelessController__Sequence__create(size_t size) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + unitree_go__msg__WirelessController__Sequence * array = (unitree_go__msg__WirelessController__Sequence *)allocator.allocate(sizeof(unitree_go__msg__WirelessController__Sequence), allocator.state); + if (!array) { + return NULL; + } + bool success = unitree_go__msg__WirelessController__Sequence__init(array, size); + if (!success) { + allocator.deallocate(array, allocator.state); + return NULL; + } + return array; +} + +void +unitree_go__msg__WirelessController__Sequence__destroy(unitree_go__msg__WirelessController__Sequence * array) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + if (array) { + unitree_go__msg__WirelessController__Sequence__fini(array); + } + allocator.deallocate(array, allocator.state); +} + +bool +unitree_go__msg__WirelessController__Sequence__are_equal(const unitree_go__msg__WirelessController__Sequence * lhs, const unitree_go__msg__WirelessController__Sequence * rhs) +{ + if (!lhs || !rhs) { + return false; + } + if (lhs->size != rhs->size) { + return false; + } + for (size_t i = 0; i < lhs->size; ++i) { + if (!unitree_go__msg__WirelessController__are_equal(&(lhs->data[i]), &(rhs->data[i]))) { + return false; + } + } + return true; +} + +bool +unitree_go__msg__WirelessController__Sequence__copy( + const unitree_go__msg__WirelessController__Sequence * input, + unitree_go__msg__WirelessController__Sequence * output) +{ + if (!input || !output) { + return false; + } + if (output->capacity < input->size) { + const size_t allocation_size = + input->size * sizeof(unitree_go__msg__WirelessController); + unitree_go__msg__WirelessController * data = + (unitree_go__msg__WirelessController *)realloc(output->data, allocation_size); + if (!data) { + return false; + } + for (size_t i = output->capacity; i < input->size; ++i) { + if (!unitree_go__msg__WirelessController__init(&data[i])) { + /* free currently allocated and return false */ + for (; i-- > output->capacity; ) { + unitree_go__msg__WirelessController__fini(&data[i]); + } + free(data); + return false; + } + } + output->data = data; + output->capacity = input->size; + } + output->size = input->size; + for (size_t i = 0; i < input->size; ++i) { + if (!unitree_go__msg__WirelessController__copy( + &(input->data[i]), &(output->data[i]))) + { + return false; + } + } + return true; +} diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.h new file mode 100644 index 0000000..0172ba8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__functions.h @@ -0,0 +1,177 @@ +// generated from rosidl_generator_c/resource/idl__functions.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__FUNCTIONS_H_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#include "unitree_go/msg/detail/wireless_controller__struct.h" + +/// Initialize msg/WirelessController message. +/** + * If the init function is called twice for the same message without + * calling fini inbetween previously allocated memory will be leaked. + * \param[in,out] msg The previously allocated message pointer. + * Fields without a default value will not be initialized by this function. + * You might want to call memset(msg, 0, sizeof( + * unitree_go__msg__WirelessController + * )) before or use + * unitree_go__msg__WirelessController__create() + * to allocate and initialize the message. + * \return true if initialization was successful, otherwise false + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__WirelessController__init(unitree_go__msg__WirelessController * msg); + +/// Finalize msg/WirelessController message. +/** + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__WirelessController__fini(unitree_go__msg__WirelessController * msg); + +/// Create msg/WirelessController message. +/** + * It allocates the memory for the message, sets the memory to zero, and + * calls + * unitree_go__msg__WirelessController__init(). + * \return The pointer to the initialized message if successful, + * otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__WirelessController * +unitree_go__msg__WirelessController__create(); + +/// Destroy msg/WirelessController message. +/** + * It calls + * unitree_go__msg__WirelessController__fini() + * and frees the memory of the message. + * \param[in,out] msg The allocated message pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__WirelessController__destroy(unitree_go__msg__WirelessController * msg); + +/// Check for msg/WirelessController message equality. +/** + * \param[in] lhs The message on the left hand size of the equality operator. + * \param[in] rhs The message on the right hand size of the equality operator. + * \return true if messages are equal, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__WirelessController__are_equal(const unitree_go__msg__WirelessController * lhs, const unitree_go__msg__WirelessController * rhs); + +/// Copy a msg/WirelessController message. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source message pointer. + * \param[out] output The target message pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer is null + * or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__WirelessController__copy( + const unitree_go__msg__WirelessController * input, + unitree_go__msg__WirelessController * output); + +/// Initialize array of msg/WirelessController messages. +/** + * It allocates the memory for the number of elements and calls + * unitree_go__msg__WirelessController__init() + * for each element of the array. + * \param[in,out] array The allocated array pointer. + * \param[in] size The size / capacity of the array. + * \return true if initialization was successful, otherwise false + * If the array pointer is valid and the size is zero it is guaranteed + # to return true. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__WirelessController__Sequence__init(unitree_go__msg__WirelessController__Sequence * array, size_t size); + +/// Finalize array of msg/WirelessController messages. +/** + * It calls + * unitree_go__msg__WirelessController__fini() + * for each element of the array and frees the memory for the number of + * elements. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__WirelessController__Sequence__fini(unitree_go__msg__WirelessController__Sequence * array); + +/// Create array of msg/WirelessController messages. +/** + * It allocates the memory for the array and calls + * unitree_go__msg__WirelessController__Sequence__init(). + * \param[in] size The size / capacity of the array. + * \return The pointer to the initialized array if successful, otherwise NULL + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +unitree_go__msg__WirelessController__Sequence * +unitree_go__msg__WirelessController__Sequence__create(size_t size); + +/// Destroy array of msg/WirelessController messages. +/** + * It calls + * unitree_go__msg__WirelessController__Sequence__fini() + * on the array, + * and frees the memory of the array. + * \param[in,out] array The initialized array pointer. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +void +unitree_go__msg__WirelessController__Sequence__destroy(unitree_go__msg__WirelessController__Sequence * array); + +/// Check for msg/WirelessController message array equality. +/** + * \param[in] lhs The message array on the left hand size of the equality operator. + * \param[in] rhs The message array on the right hand size of the equality operator. + * \return true if message arrays are equal in size and content, otherwise false. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__WirelessController__Sequence__are_equal(const unitree_go__msg__WirelessController__Sequence * lhs, const unitree_go__msg__WirelessController__Sequence * rhs); + +/// Copy an array of msg/WirelessController messages. +/** + * This functions performs a deep copy, as opposed to the shallow copy that + * plain assignment yields. + * + * \param[in] input The source array pointer. + * \param[out] output The target array pointer, which must + * have been initialized before calling this function. + * \return true if successful, or false if either pointer + * is null or memory allocation fails. + */ +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +bool +unitree_go__msg__WirelessController__Sequence__copy( + const unitree_go__msg__WirelessController__Sequence * input, + unitree_go__msg__WirelessController__Sequence * output); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__FUNCTIONS_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_c.h new file mode 100644 index 0000000..588e22f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_c.h @@ -0,0 +1,36 @@ +// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ + + +#include +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t get_serialized_size_unitree_go__msg__WirelessController( + const void * untyped_ros_message, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +size_t max_serialized_size_unitree_go__msg__WirelessController( + bool & full_bounded, + size_t current_alignment); + +ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, unitree_go, msg, WirelessController)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_cpp.hpp new file mode 100644 index 0000000..408d255 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_fastrtps_cpp.hpp @@ -0,0 +1,79 @@ +// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h" +#include "unitree_go/msg/detail/wireless_controller__struct.hpp" + +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" +# ifdef __clang__ +# pragma clang diagnostic ignored "-Wdeprecated-register" +# pragma clang diagnostic ignored "-Wreturn-type-c-linkage" +# endif +#endif +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif + +#include "fastcdr/Cdr.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace typesupport_fastrtps_cpp +{ + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_serialize( + const unitree_go::msg::WirelessController & ros_message, + eprosima::fastcdr::Cdr & cdr); + +bool +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +cdr_deserialize( + eprosima::fastcdr::Cdr & cdr, + unitree_go::msg::WirelessController & ros_message); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +get_serialized_size( + const unitree_go::msg::WirelessController & ros_message, + size_t current_alignment); + +size_t +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +max_serialized_size_WirelessController( + bool & full_bounded, + size_t current_alignment); + +} // namespace typesupport_fastrtps_cpp + +} // namespace msg + +} // namespace unitree_go + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, unitree_go, msg, WirelessController)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_c.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_c.h new file mode 100644 index 0000000..e8a8623 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_c.h @@ -0,0 +1,26 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, WirelessController)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_cpp.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_cpp.hpp new file mode 100644 index 0000000..cbaa473 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_cpp.hpp @@ -0,0 +1,27 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ + + +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_interface/macros.h" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +// TODO(dirk-thomas) these visibility macros should be message package specific +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, WirelessController)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.h new file mode 100644 index 0000000..fe23990 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.h @@ -0,0 +1,44 @@ +// generated from rosidl_generator_c/resource/idl__struct.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__STRUCT_H_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__STRUCT_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include + + +// Constants defined in the message + +// Struct defined in msg/WirelessController in the package unitree_go. +typedef struct unitree_go__msg__WirelessController +{ + float lx; + float ly; + float rx; + float ry; + uint16_t keys; +} unitree_go__msg__WirelessController; + +// Struct for a sequence of unitree_go__msg__WirelessController. +typedef struct unitree_go__msg__WirelessController__Sequence +{ + unitree_go__msg__WirelessController * data; + /// The number of valid items in data + size_t size; + /// The number of allocated items in data + size_t capacity; +} unitree_go__msg__WirelessController__Sequence; + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__STRUCT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.hpp new file mode 100644 index 0000000..a77cab5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__struct.hpp @@ -0,0 +1,186 @@ +// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__STRUCT_HPP_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__STRUCT_HPP_ + +#include +#include +#include +#include +#include +#include +#include + + +#ifndef _WIN32 +# define DEPRECATED__unitree_go__msg__WirelessController __attribute__((deprecated)) +#else +# define DEPRECATED__unitree_go__msg__WirelessController __declspec(deprecated) +#endif + +namespace unitree_go +{ + +namespace msg +{ + +// message struct +template +struct WirelessController_ +{ + using Type = WirelessController_; + + explicit WirelessController_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->lx = 0.0f; + this->ly = 0.0f; + this->rx = 0.0f; + this->ry = 0.0f; + this->keys = 0; + } + } + + explicit WirelessController_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL) + { + (void)_alloc; + if (rosidl_runtime_cpp::MessageInitialization::ALL == _init || + rosidl_runtime_cpp::MessageInitialization::ZERO == _init) + { + this->lx = 0.0f; + this->ly = 0.0f; + this->rx = 0.0f; + this->ry = 0.0f; + this->keys = 0; + } + } + + // field types and members + using _lx_type = + float; + _lx_type lx; + using _ly_type = + float; + _ly_type ly; + using _rx_type = + float; + _rx_type rx; + using _ry_type = + float; + _ry_type ry; + using _keys_type = + uint16_t; + _keys_type keys; + + // setters for named parameter idiom + Type & set__lx( + const float & _arg) + { + this->lx = _arg; + return *this; + } + Type & set__ly( + const float & _arg) + { + this->ly = _arg; + return *this; + } + Type & set__rx( + const float & _arg) + { + this->rx = _arg; + return *this; + } + Type & set__ry( + const float & _arg) + { + this->ry = _arg; + return *this; + } + Type & set__keys( + const uint16_t & _arg) + { + this->keys = _arg; + return *this; + } + + // constant declarations + + // pointer types + using RawPtr = + unitree_go::msg::WirelessController_ *; + using ConstRawPtr = + const unitree_go::msg::WirelessController_ *; + using SharedPtr = + std::shared_ptr>; + using ConstSharedPtr = + std::shared_ptr const>; + + template>> + using UniquePtrWithDeleter = + std::unique_ptr, Deleter>; + + using UniquePtr = UniquePtrWithDeleter<>; + + template>> + using ConstUniquePtrWithDeleter = + std::unique_ptr const, Deleter>; + using ConstUniquePtr = ConstUniquePtrWithDeleter<>; + + using WeakPtr = + std::weak_ptr>; + using ConstWeakPtr = + std::weak_ptr const>; + + // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead + // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly + typedef DEPRECATED__unitree_go__msg__WirelessController + std::shared_ptr> + Ptr; + typedef DEPRECATED__unitree_go__msg__WirelessController + std::shared_ptr const> + ConstPtr; + + // comparison operators + bool operator==(const WirelessController_ & other) const + { + if (this->lx != other.lx) { + return false; + } + if (this->ly != other.ly) { + return false; + } + if (this->rx != other.rx) { + return false; + } + if (this->ry != other.ry) { + return false; + } + if (this->keys != other.keys) { + return false; + } + return true; + } + bool operator!=(const WirelessController_ & other) const + { + return !this->operator==(other); + } +}; // struct WirelessController_ + +// alias to use template instance with default allocator +using WirelessController = + unitree_go::msg::WirelessController_>; + +// constant definitions + +} // namespace msg + +} // namespace unitree_go + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__STRUCT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__traits.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__traits.hpp new file mode 100644 index 0000000..b1ecefe --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__traits.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TRAITS_HPP_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TRAITS_HPP_ + +#include "unitree_go/msg/detail/wireless_controller__struct.hpp" +#include +#include +#include + +namespace rosidl_generator_traits +{ + +template<> +inline const char * data_type() +{ + return "unitree_go::msg::WirelessController"; +} + +template<> +inline const char * name() +{ + return "unitree_go/msg/WirelessController"; +} + +template<> +struct has_fixed_size + : std::integral_constant {}; + +template<> +struct has_bounded_size + : std::integral_constant {}; + +template<> +struct is_message + : std::true_type {}; + +} // namespace rosidl_generator_traits + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TRAITS_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.c b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.c new file mode 100644 index 0000000..20f8522 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.c @@ -0,0 +1,141 @@ +// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#include +#include "unitree_go/msg/detail/wireless_controller__rosidl_typesupport_introspection_c.h" +#include "unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h" +#include "rosidl_typesupport_introspection_c/field_types.h" +#include "rosidl_typesupport_introspection_c/identifier.h" +#include "rosidl_typesupport_introspection_c/message_introspection.h" +#include "unitree_go/msg/detail/wireless_controller__functions.h" +#include "unitree_go/msg/detail/wireless_controller__struct.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +void WirelessController__rosidl_typesupport_introspection_c__WirelessController_init_function( + void * message_memory, enum rosidl_runtime_c__message_initialization _init) +{ + // TODO(karsten1987): initializers are not yet implemented for typesupport c + // see https://github.com/ros2/ros2/issues/397 + (void) _init; + unitree_go__msg__WirelessController__init(message_memory); +} + +void WirelessController__rosidl_typesupport_introspection_c__WirelessController_fini_function(void * message_memory) +{ + unitree_go__msg__WirelessController__fini(message_memory); +} + +static rosidl_typesupport_introspection_c__MessageMember WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_member_array[5] = { + { + "lx", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__WirelessController, lx), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "ly", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__WirelessController, ly), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "rx", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__WirelessController, rx), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "ry", // name + rosidl_typesupport_introspection_c__ROS_TYPE_FLOAT, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__WirelessController, ry), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + }, + { + "keys", // name + rosidl_typesupport_introspection_c__ROS_TYPE_UINT16, // type + 0, // upper bound of string + NULL, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go__msg__WirelessController, keys), // bytes offset in struct + NULL, // default value + NULL, // size() function pointer + NULL, // get_const(index) function pointer + NULL, // get(index) function pointer + NULL // resize(index) function pointer + } +}; + +static const rosidl_typesupport_introspection_c__MessageMembers WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_members = { + "unitree_go__msg", // message namespace + "WirelessController", // message name + 5, // number of fields + sizeof(unitree_go__msg__WirelessController), + WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_member_array, // message members + WirelessController__rosidl_typesupport_introspection_c__WirelessController_init_function, // function to initialize message memory (memory has to be allocated) + WirelessController__rosidl_typesupport_introspection_c__WirelessController_fini_function // function to terminate message instance (will not free memory) +}; + +// this is not const since it must be initialized on first access +// since C does not allow non-integral compile-time constants +static rosidl_message_type_support_t WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_type_support_handle = { + 0, + &WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_members, + get_message_typesupport_handle_function, +}; + +ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, unitree_go, msg, WirelessController)() { + if (!WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_type_support_handle.typesupport_identifier) { + WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_type_support_handle.typesupport_identifier = + rosidl_typesupport_introspection_c__identifier; + } + return &WirelessController__rosidl_typesupport_introspection_c__WirelessController_message_type_support_handle; +} +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.cpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.cpp new file mode 100644 index 0000000..b12627f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.cpp @@ -0,0 +1,167 @@ +// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#include "array" +#include "cstddef" +#include "string" +#include "vector" +#include "rosidl_runtime_c/message_type_support_struct.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" +#include "rosidl_typesupport_interface/macros.h" +#include "unitree_go/msg/detail/wireless_controller__struct.hpp" +#include "rosidl_typesupport_introspection_cpp/field_types.hpp" +#include "rosidl_typesupport_introspection_cpp/identifier.hpp" +#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp" +#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_introspection_cpp/visibility_control.h" + +namespace unitree_go +{ + +namespace msg +{ + +namespace rosidl_typesupport_introspection_cpp +{ + +void WirelessController_init_function( + void * message_memory, rosidl_runtime_cpp::MessageInitialization _init) +{ + new (message_memory) unitree_go::msg::WirelessController(_init); +} + +void WirelessController_fini_function(void * message_memory) +{ + auto typed_message = static_cast(message_memory); + typed_message->~WirelessController(); +} + +static const ::rosidl_typesupport_introspection_cpp::MessageMember WirelessController_message_member_array[5] = { + { + "lx", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::WirelessController, lx), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "ly", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::WirelessController, ly), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "rx", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::WirelessController, rx), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "ry", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_FLOAT, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::WirelessController, ry), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + }, + { + "keys", // name + ::rosidl_typesupport_introspection_cpp::ROS_TYPE_UINT16, // type + 0, // upper bound of string + nullptr, // members of sub message + false, // is array + 0, // array size + false, // is upper bound + offsetof(unitree_go::msg::WirelessController, keys), // bytes offset in struct + nullptr, // default value + nullptr, // size() function pointer + nullptr, // get_const(index) function pointer + nullptr, // get(index) function pointer + nullptr // resize(index) function pointer + } +}; + +static const ::rosidl_typesupport_introspection_cpp::MessageMembers WirelessController_message_members = { + "unitree_go::msg", // message namespace + "WirelessController", // message name + 5, // number of fields + sizeof(unitree_go::msg::WirelessController), + WirelessController_message_member_array, // message members + WirelessController_init_function, // function to initialize message memory (memory has to be allocated) + WirelessController_fini_function // function to terminate message instance (will not free memory) +}; + +static const rosidl_message_type_support_t WirelessController_message_type_support_handle = { + ::rosidl_typesupport_introspection_cpp::typesupport_identifier, + &WirelessController_message_members, + get_message_typesupport_handle_function, +}; + +} // namespace rosidl_typesupport_introspection_cpp + +} // namespace msg + +} // namespace unitree_go + + +namespace rosidl_typesupport_introspection_cpp +{ + +template<> +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +get_message_type_support_handle() +{ + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::WirelessController_message_type_support_handle; +} + +} // namespace rosidl_typesupport_introspection_cpp + +#ifdef __cplusplus +extern "C" +{ +#endif + +ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, unitree_go, msg, WirelessController)() { + return &::unitree_go::msg::rosidl_typesupport_introspection_cpp::WirelessController_message_type_support_handle; +} + +#ifdef __cplusplus +} +#endif diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.h new file mode 100644 index 0000000..e40fb74 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.h @@ -0,0 +1,33 @@ +// generated from rosidl_generator_c/resource/idl__type_support.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TYPE_SUPPORT_H_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TYPE_SUPPORT_H_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_c__visibility_control.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "rosidl_runtime_c/message_type_support_struct.h" + +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_C_PUBLIC_unitree_go +const rosidl_message_type_support_t * +ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + unitree_go, + msg, + WirelessController +)(); + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TYPE_SUPPORT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.hpp new file mode 100644 index 0000000..7fee35e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/detail/wireless_controller__type_support.hpp @@ -0,0 +1,31 @@ +// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TYPE_SUPPORT_HPP_ +#define UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TYPE_SUPPORT_HPP_ + +#include "rosidl_typesupport_interface/macros.h" + +#include "unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp" + +#include "rosidl_typesupport_cpp/message_type_support.hpp" + +#ifdef __cplusplus +extern "C" +{ +#endif +// Forward declare the get type support functions for this type. +ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go +const rosidl_message_type_support_t * + ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME( + rosidl_typesupport_cpp, + unitree_go, + msg, + WirelessController +)(); +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__DETAIL__WIRELESS_CONTROLLER__TYPE_SUPPORT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.h new file mode 100644 index 0000000..d34d457 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ERROR_H_ +#define UNITREE_GO__MSG__ERROR_H_ + +#include "unitree_go/msg/detail/error__struct.h" +#include "unitree_go/msg/detail/error__functions.h" +#include "unitree_go/msg/detail/error__type_support.h" + +#endif // UNITREE_GO__MSG__ERROR_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.hpp new file mode 100644 index 0000000..69d03b2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/error.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ERROR_HPP_ +#define UNITREE_GO__MSG__ERROR_HPP_ + +#include "unitree_go/msg/detail/error__struct.hpp" +#include "unitree_go/msg/detail/error__builder.hpp" +#include "unitree_go/msg/detail/error__traits.hpp" +#include "unitree_go/msg/detail/error__type_support.hpp" + +#endif // UNITREE_GO__MSG__ERROR_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.h new file mode 100644 index 0000000..8030eaa --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__GO2_FRONT_VIDEO_DATA_H_ +#define UNITREE_GO__MSG__GO2_FRONT_VIDEO_DATA_H_ + +#include "unitree_go/msg/detail/go2_front_video_data__struct.h" +#include "unitree_go/msg/detail/go2_front_video_data__functions.h" +#include "unitree_go/msg/detail/go2_front_video_data__type_support.h" + +#endif // UNITREE_GO__MSG__GO2_FRONT_VIDEO_DATA_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.hpp new file mode 100644 index 0000000..2818e32 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/go2_front_video_data.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__GO2_FRONT_VIDEO_DATA_HPP_ +#define UNITREE_GO__MSG__GO2_FRONT_VIDEO_DATA_HPP_ + +#include "unitree_go/msg/detail/go2_front_video_data__struct.hpp" +#include "unitree_go/msg/detail/go2_front_video_data__builder.hpp" +#include "unitree_go/msg/detail/go2_front_video_data__traits.hpp" +#include "unitree_go/msg/detail/go2_front_video_data__type_support.hpp" + +#endif // UNITREE_GO__MSG__GO2_FRONT_VIDEO_DATA_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.h new file mode 100644 index 0000000..1d43b49 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__HEIGHT_MAP_H_ +#define UNITREE_GO__MSG__HEIGHT_MAP_H_ + +#include "unitree_go/msg/detail/height_map__struct.h" +#include "unitree_go/msg/detail/height_map__functions.h" +#include "unitree_go/msg/detail/height_map__type_support.h" + +#endif // UNITREE_GO__MSG__HEIGHT_MAP_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.hpp new file mode 100644 index 0000000..5e89a32 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/height_map.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__HEIGHT_MAP_HPP_ +#define UNITREE_GO__MSG__HEIGHT_MAP_HPP_ + +#include "unitree_go/msg/detail/height_map__struct.hpp" +#include "unitree_go/msg/detail/height_map__builder.hpp" +#include "unitree_go/msg/detail/height_map__traits.hpp" +#include "unitree_go/msg/detail/height_map__type_support.hpp" + +#endif // UNITREE_GO__MSG__HEIGHT_MAP_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.h new file mode 100644 index 0000000..811c6bc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__IMU_STATE_H_ +#define UNITREE_GO__MSG__IMU_STATE_H_ + +#include "unitree_go/msg/detail/imu_state__struct.h" +#include "unitree_go/msg/detail/imu_state__functions.h" +#include "unitree_go/msg/detail/imu_state__type_support.h" + +#endif // UNITREE_GO__MSG__IMU_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.hpp new file mode 100644 index 0000000..d3ecf23 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/imu_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__IMU_STATE_HPP_ +#define UNITREE_GO__MSG__IMU_STATE_HPP_ + +#include "unitree_go/msg/detail/imu_state__struct.hpp" +#include "unitree_go/msg/detail/imu_state__builder.hpp" +#include "unitree_go/msg/detail/imu_state__traits.hpp" +#include "unitree_go/msg/detail/imu_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__IMU_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.h new file mode 100644 index 0000000..f32bb9e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__INTERFACE_CONFIG_H_ +#define UNITREE_GO__MSG__INTERFACE_CONFIG_H_ + +#include "unitree_go/msg/detail/interface_config__struct.h" +#include "unitree_go/msg/detail/interface_config__functions.h" +#include "unitree_go/msg/detail/interface_config__type_support.h" + +#endif // UNITREE_GO__MSG__INTERFACE_CONFIG_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.hpp new file mode 100644 index 0000000..3da4e0a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/interface_config.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__INTERFACE_CONFIG_HPP_ +#define UNITREE_GO__MSG__INTERFACE_CONFIG_HPP_ + +#include "unitree_go/msg/detail/interface_config__struct.hpp" +#include "unitree_go/msg/detail/interface_config__builder.hpp" +#include "unitree_go/msg/detail/interface_config__traits.hpp" +#include "unitree_go/msg/detail/interface_config__type_support.hpp" + +#endif // UNITREE_GO__MSG__INTERFACE_CONFIG_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.h new file mode 100644 index 0000000..40a1aa9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__LIDAR_STATE_H_ +#define UNITREE_GO__MSG__LIDAR_STATE_H_ + +#include "unitree_go/msg/detail/lidar_state__struct.h" +#include "unitree_go/msg/detail/lidar_state__functions.h" +#include "unitree_go/msg/detail/lidar_state__type_support.h" + +#endif // UNITREE_GO__MSG__LIDAR_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.hpp new file mode 100644 index 0000000..e0972ac --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/lidar_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__LIDAR_STATE_HPP_ +#define UNITREE_GO__MSG__LIDAR_STATE_HPP_ + +#include "unitree_go/msg/detail/lidar_state__struct.hpp" +#include "unitree_go/msg/detail/lidar_state__builder.hpp" +#include "unitree_go/msg/detail/lidar_state__traits.hpp" +#include "unitree_go/msg/detail/lidar_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__LIDAR_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.h new file mode 100644 index 0000000..e341923 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__LOW_CMD_H_ +#define UNITREE_GO__MSG__LOW_CMD_H_ + +#include "unitree_go/msg/detail/low_cmd__struct.h" +#include "unitree_go/msg/detail/low_cmd__functions.h" +#include "unitree_go/msg/detail/low_cmd__type_support.h" + +#endif // UNITREE_GO__MSG__LOW_CMD_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.hpp new file mode 100644 index 0000000..72b89c0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_cmd.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__LOW_CMD_HPP_ +#define UNITREE_GO__MSG__LOW_CMD_HPP_ + +#include "unitree_go/msg/detail/low_cmd__struct.hpp" +#include "unitree_go/msg/detail/low_cmd__builder.hpp" +#include "unitree_go/msg/detail/low_cmd__traits.hpp" +#include "unitree_go/msg/detail/low_cmd__type_support.hpp" + +#endif // UNITREE_GO__MSG__LOW_CMD_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.h new file mode 100644 index 0000000..37a0af7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__LOW_STATE_H_ +#define UNITREE_GO__MSG__LOW_STATE_H_ + +#include "unitree_go/msg/detail/low_state__struct.h" +#include "unitree_go/msg/detail/low_state__functions.h" +#include "unitree_go/msg/detail/low_state__type_support.h" + +#endif // UNITREE_GO__MSG__LOW_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.hpp new file mode 100644 index 0000000..bca19a5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/low_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__LOW_STATE_HPP_ +#define UNITREE_GO__MSG__LOW_STATE_HPP_ + +#include "unitree_go/msg/detail/low_state__struct.hpp" +#include "unitree_go/msg/detail/low_state__builder.hpp" +#include "unitree_go/msg/detail/low_state__traits.hpp" +#include "unitree_go/msg/detail/low_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__LOW_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.h new file mode 100644 index 0000000..68b630f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__MOTOR_CMD_H_ +#define UNITREE_GO__MSG__MOTOR_CMD_H_ + +#include "unitree_go/msg/detail/motor_cmd__struct.h" +#include "unitree_go/msg/detail/motor_cmd__functions.h" +#include "unitree_go/msg/detail/motor_cmd__type_support.h" + +#endif // UNITREE_GO__MSG__MOTOR_CMD_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.hpp new file mode 100644 index 0000000..6b572ee --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_cmd.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__MOTOR_CMD_HPP_ +#define UNITREE_GO__MSG__MOTOR_CMD_HPP_ + +#include "unitree_go/msg/detail/motor_cmd__struct.hpp" +#include "unitree_go/msg/detail/motor_cmd__builder.hpp" +#include "unitree_go/msg/detail/motor_cmd__traits.hpp" +#include "unitree_go/msg/detail/motor_cmd__type_support.hpp" + +#endif // UNITREE_GO__MSG__MOTOR_CMD_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.h new file mode 100644 index 0000000..11a6aba --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__MOTOR_STATE_H_ +#define UNITREE_GO__MSG__MOTOR_STATE_H_ + +#include "unitree_go/msg/detail/motor_state__struct.h" +#include "unitree_go/msg/detail/motor_state__functions.h" +#include "unitree_go/msg/detail/motor_state__type_support.h" + +#endif // UNITREE_GO__MSG__MOTOR_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.hpp new file mode 100644 index 0000000..97aa176 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/motor_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__MOTOR_STATE_HPP_ +#define UNITREE_GO__MSG__MOTOR_STATE_HPP_ + +#include "unitree_go/msg/detail/motor_state__struct.hpp" +#include "unitree_go/msg/detail/motor_state__builder.hpp" +#include "unitree_go/msg/detail/motor_state__traits.hpp" +#include "unitree_go/msg/detail/motor_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__MOTOR_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.h new file mode 100644 index 0000000..f96e7b1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__PATH_POINT_H_ +#define UNITREE_GO__MSG__PATH_POINT_H_ + +#include "unitree_go/msg/detail/path_point__struct.h" +#include "unitree_go/msg/detail/path_point__functions.h" +#include "unitree_go/msg/detail/path_point__type_support.h" + +#endif // UNITREE_GO__MSG__PATH_POINT_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.hpp new file mode 100644 index 0000000..621cdab --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/path_point.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__PATH_POINT_HPP_ +#define UNITREE_GO__MSG__PATH_POINT_HPP_ + +#include "unitree_go/msg/detail/path_point__struct.hpp" +#include "unitree_go/msg/detail/path_point__builder.hpp" +#include "unitree_go/msg/detail/path_point__traits.hpp" +#include "unitree_go/msg/detail/path_point__type_support.hpp" + +#endif // UNITREE_GO__MSG__PATH_POINT_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.h new file mode 100644 index 0000000..77124a4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__REQ_H_ +#define UNITREE_GO__MSG__REQ_H_ + +#include "unitree_go/msg/detail/req__struct.h" +#include "unitree_go/msg/detail/req__functions.h" +#include "unitree_go/msg/detail/req__type_support.h" + +#endif // UNITREE_GO__MSG__REQ_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.hpp new file mode 100644 index 0000000..1409e67 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/req.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__REQ_HPP_ +#define UNITREE_GO__MSG__REQ_HPP_ + +#include "unitree_go/msg/detail/req__struct.hpp" +#include "unitree_go/msg/detail/req__builder.hpp" +#include "unitree_go/msg/detail/req__traits.hpp" +#include "unitree_go/msg/detail/req__type_support.hpp" + +#endif // UNITREE_GO__MSG__REQ_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.h new file mode 100644 index 0000000..21f7767 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__RES_H_ +#define UNITREE_GO__MSG__RES_H_ + +#include "unitree_go/msg/detail/res__struct.h" +#include "unitree_go/msg/detail/res__functions.h" +#include "unitree_go/msg/detail/res__type_support.h" + +#endif // UNITREE_GO__MSG__RES_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.hpp new file mode 100644 index 0000000..faa1ac4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/res.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__RES_HPP_ +#define UNITREE_GO__MSG__RES_HPP_ + +#include "unitree_go/msg/detail/res__struct.hpp" +#include "unitree_go/msg/detail/res__builder.hpp" +#include "unitree_go/msg/detail/res__traits.hpp" +#include "unitree_go/msg/detail/res__type_support.hpp" + +#endif // UNITREE_GO__MSG__RES_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_c__visibility_control.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_c__visibility_control.h new file mode 100644 index 0000000..1416935 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_c__visibility_control.h @@ -0,0 +1,42 @@ +// generated from rosidl_generator_c/resource/rosidl_generator_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ +#define UNITREE_GO__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_GENERATOR_C_EXPORT_unitree_go __attribute__ ((dllexport)) + #define ROSIDL_GENERATOR_C_IMPORT_unitree_go __attribute__ ((dllimport)) + #else + #define ROSIDL_GENERATOR_C_EXPORT_unitree_go __declspec(dllexport) + #define ROSIDL_GENERATOR_C_IMPORT_unitree_go __declspec(dllimport) + #endif + #ifdef ROSIDL_GENERATOR_C_BUILDING_DLL_unitree_go + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_go ROSIDL_GENERATOR_C_EXPORT_unitree_go + #else + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_go ROSIDL_GENERATOR_C_IMPORT_unitree_go + #endif +#else + #define ROSIDL_GENERATOR_C_EXPORT_unitree_go __attribute__ ((visibility("default"))) + #define ROSIDL_GENERATOR_C_IMPORT_unitree_go + #if __GNUC__ >= 4 + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_go __attribute__ ((visibility("default"))) + #else + #define ROSIDL_GENERATOR_C_PUBLIC_unitree_go + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp new file mode 100644 index 0000000..ef63cae --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_generator_cpp__visibility_control.hpp @@ -0,0 +1,42 @@ +// generated from rosidl_generator_cpp/resource/rosidl_generator_cpp__visibility_control.hpp.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_ +#define UNITREE_GO__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_GENERATOR_CPP_EXPORT_unitree_go __attribute__ ((dllexport)) + #define ROSIDL_GENERATOR_CPP_IMPORT_unitree_go __attribute__ ((dllimport)) + #else + #define ROSIDL_GENERATOR_CPP_EXPORT_unitree_go __declspec(dllexport) + #define ROSIDL_GENERATOR_CPP_IMPORT_unitree_go __declspec(dllimport) + #endif + #ifdef ROSIDL_GENERATOR_CPP_BUILDING_DLL_unitree_go + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go ROSIDL_GENERATOR_CPP_EXPORT_unitree_go + #else + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go ROSIDL_GENERATOR_CPP_IMPORT_unitree_go + #endif +#else + #define ROSIDL_GENERATOR_CPP_EXPORT_unitree_go __attribute__ ((visibility("default"))) + #define ROSIDL_GENERATOR_CPP_IMPORT_unitree_go + #if __GNUC__ >= 4 + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go __attribute__ ((visibility("default"))) + #else + #define ROSIDL_GENERATOR_CPP_PUBLIC_unitree_go + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h new file mode 100644 index 0000000..dbbaa78 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_c__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_fastrtps_c/resource/rosidl_typesupport_fastrtps_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ +#define UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ + +#if __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_go __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_go __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_go __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_go __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_C_BUILDING_DLL_unitree_go + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_go + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_go + #endif +#else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_unitree_go __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_unitree_go + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_unitree_go + #endif +#endif + +#if __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h new file mode 100644 index 0000000..9334613 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_fastrtps_cpp/resource/rosidl_typesupport_fastrtps_cpp__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ +#define UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ + +#if __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_go __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_go __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_go __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_go __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_CPP_BUILDING_DLL_unitree_go + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_go + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_go + #endif +#else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_unitree_go __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_unitree_go + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_unitree_go + #endif +#endif + +#if __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h new file mode 100644 index 0000000..8191c90 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/rosidl_typesupport_introspection_c__visibility_control.h @@ -0,0 +1,43 @@ +// generated from +// rosidl_typesupport_introspection_c/resource/rosidl_typesupport_introspection_c__visibility_control.h.in +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ +#define UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go __attribute__ ((dllexport)) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_go __attribute__ ((dllimport)) + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go __declspec(dllexport) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_go __declspec(dllimport) + #endif + #ifdef ROSIDL_TYPESUPPORT_INTROSPECTION_C_BUILDING_DLL_unitree_go + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_go + #endif +#else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_unitree_go __attribute__ ((visibility("default"))) + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_unitree_go + #if __GNUC__ >= 4 + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go __attribute__ ((visibility("default"))) + #else + #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_unitree_go + #endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif // UNITREE_GO__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.h new file mode 100644 index 0000000..77b5ab7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__SPORT_MODE_CMD_H_ +#define UNITREE_GO__MSG__SPORT_MODE_CMD_H_ + +#include "unitree_go/msg/detail/sport_mode_cmd__struct.h" +#include "unitree_go/msg/detail/sport_mode_cmd__functions.h" +#include "unitree_go/msg/detail/sport_mode_cmd__type_support.h" + +#endif // UNITREE_GO__MSG__SPORT_MODE_CMD_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.hpp new file mode 100644 index 0000000..08f5667 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_cmd.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__SPORT_MODE_CMD_HPP_ +#define UNITREE_GO__MSG__SPORT_MODE_CMD_HPP_ + +#include "unitree_go/msg/detail/sport_mode_cmd__struct.hpp" +#include "unitree_go/msg/detail/sport_mode_cmd__builder.hpp" +#include "unitree_go/msg/detail/sport_mode_cmd__traits.hpp" +#include "unitree_go/msg/detail/sport_mode_cmd__type_support.hpp" + +#endif // UNITREE_GO__MSG__SPORT_MODE_CMD_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.h new file mode 100644 index 0000000..f8c2660 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__SPORT_MODE_STATE_H_ +#define UNITREE_GO__MSG__SPORT_MODE_STATE_H_ + +#include "unitree_go/msg/detail/sport_mode_state__struct.h" +#include "unitree_go/msg/detail/sport_mode_state__functions.h" +#include "unitree_go/msg/detail/sport_mode_state__type_support.h" + +#endif // UNITREE_GO__MSG__SPORT_MODE_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.hpp new file mode 100644 index 0000000..d61ced0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/sport_mode_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__SPORT_MODE_STATE_HPP_ +#define UNITREE_GO__MSG__SPORT_MODE_STATE_HPP_ + +#include "unitree_go/msg/detail/sport_mode_state__struct.hpp" +#include "unitree_go/msg/detail/sport_mode_state__builder.hpp" +#include "unitree_go/msg/detail/sport_mode_state__traits.hpp" +#include "unitree_go/msg/detail/sport_mode_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__SPORT_MODE_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.h new file mode 100644 index 0000000..2c05811 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__TIME_SPEC_H_ +#define UNITREE_GO__MSG__TIME_SPEC_H_ + +#include "unitree_go/msg/detail/time_spec__struct.h" +#include "unitree_go/msg/detail/time_spec__functions.h" +#include "unitree_go/msg/detail/time_spec__type_support.h" + +#endif // UNITREE_GO__MSG__TIME_SPEC_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.hpp new file mode 100644 index 0000000..42f8731 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/time_spec.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__TIME_SPEC_HPP_ +#define UNITREE_GO__MSG__TIME_SPEC_HPP_ + +#include "unitree_go/msg/detail/time_spec__struct.hpp" +#include "unitree_go/msg/detail/time_spec__builder.hpp" +#include "unitree_go/msg/detail/time_spec__traits.hpp" +#include "unitree_go/msg/detail/time_spec__type_support.hpp" + +#endif // UNITREE_GO__MSG__TIME_SPEC_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.h new file mode 100644 index 0000000..743aaae --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__UWB_STATE_H_ +#define UNITREE_GO__MSG__UWB_STATE_H_ + +#include "unitree_go/msg/detail/uwb_state__struct.h" +#include "unitree_go/msg/detail/uwb_state__functions.h" +#include "unitree_go/msg/detail/uwb_state__type_support.h" + +#endif // UNITREE_GO__MSG__UWB_STATE_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.hpp new file mode 100644 index 0000000..6bbacba --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_state.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__UWB_STATE_HPP_ +#define UNITREE_GO__MSG__UWB_STATE_HPP_ + +#include "unitree_go/msg/detail/uwb_state__struct.hpp" +#include "unitree_go/msg/detail/uwb_state__builder.hpp" +#include "unitree_go/msg/detail/uwb_state__traits.hpp" +#include "unitree_go/msg/detail/uwb_state__type_support.hpp" + +#endif // UNITREE_GO__MSG__UWB_STATE_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.h new file mode 100644 index 0000000..d80e55e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__UWB_SWITCH_H_ +#define UNITREE_GO__MSG__UWB_SWITCH_H_ + +#include "unitree_go/msg/detail/uwb_switch__struct.h" +#include "unitree_go/msg/detail/uwb_switch__functions.h" +#include "unitree_go/msg/detail/uwb_switch__type_support.h" + +#endif // UNITREE_GO__MSG__UWB_SWITCH_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.hpp new file mode 100644 index 0000000..9845594 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/uwb_switch.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__UWB_SWITCH_HPP_ +#define UNITREE_GO__MSG__UWB_SWITCH_HPP_ + +#include "unitree_go/msg/detail/uwb_switch__struct.hpp" +#include "unitree_go/msg/detail/uwb_switch__builder.hpp" +#include "unitree_go/msg/detail/uwb_switch__traits.hpp" +#include "unitree_go/msg/detail/uwb_switch__type_support.hpp" + +#endif // UNITREE_GO__MSG__UWB_SWITCH_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.h b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.h new file mode 100644 index 0000000..67783ce --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.h @@ -0,0 +1,12 @@ +// generated from rosidl_generator_c/resource/idl.h.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__WIRELESS_CONTROLLER_H_ +#define UNITREE_GO__MSG__WIRELESS_CONTROLLER_H_ + +#include "unitree_go/msg/detail/wireless_controller__struct.h" +#include "unitree_go/msg/detail/wireless_controller__functions.h" +#include "unitree_go/msg/detail/wireless_controller__type_support.h" + +#endif // UNITREE_GO__MSG__WIRELESS_CONTROLLER_H_ diff --git a/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.hpp b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.hpp new file mode 100644 index 0000000..17aa9c0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/include/unitree_go/msg/wireless_controller.hpp @@ -0,0 +1,12 @@ +// generated from rosidl_generator_cpp/resource/idl.hpp.em +// generated code does not contain a copyright notice + +#ifndef UNITREE_GO__MSG__WIRELESS_CONTROLLER_HPP_ +#define UNITREE_GO__MSG__WIRELESS_CONTROLLER_HPP_ + +#include "unitree_go/msg/detail/wireless_controller__struct.hpp" +#include "unitree_go/msg/detail/wireless_controller__builder.hpp" +#include "unitree_go/msg/detail/wireless_controller__traits.hpp" +#include "unitree_go/msg/detail/wireless_controller__type_support.hpp" + +#endif // UNITREE_GO__MSG__WIRELESS_CONTROLLER_HPP_ diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/__init__.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/__init__.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/__init__.py new file mode 100644 index 0000000..5c00080 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/__init__.py @@ -0,0 +1,22 @@ +from unitree_go.msg._audio_data import AudioData # noqa: F401 +from unitree_go.msg._bms_cmd import BmsCmd # noqa: F401 +from unitree_go.msg._bms_state import BmsState # noqa: F401 +from unitree_go.msg._error import Error # noqa: F401 +from unitree_go.msg._go2_front_video_data import Go2FrontVideoData # noqa: F401 +from unitree_go.msg._height_map import HeightMap # noqa: F401 +from unitree_go.msg._imu_state import IMUState # noqa: F401 +from unitree_go.msg._interface_config import InterfaceConfig # noqa: F401 +from unitree_go.msg._lidar_state import LidarState # noqa: F401 +from unitree_go.msg._low_cmd import LowCmd # noqa: F401 +from unitree_go.msg._low_state import LowState # noqa: F401 +from unitree_go.msg._motor_cmd import MotorCmd # noqa: F401 +from unitree_go.msg._motor_state import MotorState # noqa: F401 +from unitree_go.msg._path_point import PathPoint # noqa: F401 +from unitree_go.msg._req import Req # noqa: F401 +from unitree_go.msg._res import Res # noqa: F401 +from unitree_go.msg._sport_mode_cmd import SportModeCmd # noqa: F401 +from unitree_go.msg._sport_mode_state import SportModeState # noqa: F401 +from unitree_go.msg._time_spec import TimeSpec # noqa: F401 +from unitree_go.msg._uwb_state import UwbState # noqa: F401 +from unitree_go.msg._uwb_switch import UwbSwitch # noqa: F401 +from unitree_go.msg._wireless_controller import WirelessController # noqa: F401 diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data.py new file mode 100644 index 0000000..9c9cf86 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data.py @@ -0,0 +1,161 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/AudioData.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'data' +import array # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_AudioData(type): + """Metaclass of message 'AudioData'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.AudioData') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__audio_data + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__audio_data + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__audio_data + cls._TYPE_SUPPORT = module.type_support_msg__msg__audio_data + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__audio_data + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class AudioData(metaclass=Metaclass_AudioData): + """Message class 'AudioData'.""" + + __slots__ = [ + '_time_frame', + '_data', + ] + + _fields_and_field_types = { + 'time_frame': 'uint64', + 'data': 'sequence', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint64'), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('uint8')), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.time_frame = kwargs.get('time_frame', int()) + self.data = array.array('B', kwargs.get('data', [])) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.time_frame != other.time_frame: + return False + if self.data != other.data: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def time_frame(self): + """Message field 'time_frame'.""" + return self._time_frame + + @time_frame.setter + def time_frame(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'time_frame' field must be of type 'int'" + assert value >= 0 and value < 18446744073709551616, \ + "The 'time_frame' field must be an unsigned integer in [0, 18446744073709551615]" + self._time_frame = value + + @property + def data(self): + """Message field 'data'.""" + return self._data + + @data.setter + def data(self, value): + if isinstance(value, array.array): + assert value.typecode == 'B', \ + "The 'data' array.array() must have the type code of 'B'" + self._data = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'data' field must be a set or sequence and each value of type 'int' and each unsigned integer in [0, 255]" + self._data = array.array('B', value) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data_s.c new file mode 100644 index 0000000..e85e1b1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_audio_data_s.c @@ -0,0 +1,221 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/audio_data__struct.h" +#include "unitree_go/msg/detail/audio_data__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__audio_data__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[37]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._audio_data.AudioData", full_classname_dest, 36) == 0); + } + unitree_go__msg__AudioData * ros_message = _ros_message; + { // time_frame + PyObject * field = PyObject_GetAttrString(_pymsg, "time_frame"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->time_frame = PyLong_AsUnsignedLongLong(field); + Py_DECREF(field); + } + { // data + PyObject * field = PyObject_GetAttrString(_pymsg, "data"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(uint8_t); + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->data), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->data.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'data'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->data), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->data.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + uint8_t tmp = (uint8_t)PyLong_AsUnsignedLong(item); + + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__audio_data__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of AudioData */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._audio_data"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "AudioData"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__AudioData * ros_message = (unitree_go__msg__AudioData *)raw_ros_message; + { // time_frame + PyObject * field = NULL; + field = PyLong_FromUnsignedLongLong(ros_message->time_frame); + { + int rc = PyObject_SetAttrString(_pymessage, "time_frame", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // data + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "data"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(uint8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->data.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + uint8_t * src = &(ros_message->data.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->data.size * sizeof(uint8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd.py new file mode 100644 index 0000000..6034fde --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd.py @@ -0,0 +1,168 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/BmsCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'reserve' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_BmsCmd(type): + """Metaclass of message 'BmsCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.BmsCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__bms_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__bms_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__bms_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__bms_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__bms_cmd + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class BmsCmd(metaclass=Metaclass_BmsCmd): + """Message class 'BmsCmd'.""" + + __slots__ = [ + '_off', + '_reserve', + ] + + _fields_and_field_types = { + 'off': 'uint8', + 'reserve': 'uint8[3]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 3), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.off = kwargs.get('off', int()) + if 'reserve' not in kwargs: + self.reserve = numpy.zeros(3, dtype=numpy.uint8) + else: + self.reserve = numpy.array(kwargs.get('reserve'), dtype=numpy.uint8) + assert self.reserve.shape == (3, ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.off != other.off: + return False + if all(self.reserve != other.reserve): + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def off(self): + """Message field 'off'.""" + return self._off + + @off.setter + def off(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'off' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'off' field must be an unsigned integer in [0, 255]" + self._off = value + + @property + def reserve(self): + """Message field 'reserve'.""" + return self._reserve + + @reserve.setter + def reserve(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'reserve' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 3, \ + "The 'reserve' numpy.ndarray() must have a size of 3" + self._reserve = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'reserve' field must be a set or sequence with length 3 and each value of type 'int' and each unsigned integer in [0, 255]" + self._reserve = numpy.array(value, dtype=numpy.uint8) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd_s.c new file mode 100644 index 0000000..6c1efbd --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_cmd_s.c @@ -0,0 +1,143 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/bms_cmd__struct.h" +#include "unitree_go/msg/detail/bms_cmd__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__bms_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[31]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._bms_cmd.BmsCmd", full_classname_dest, 30) == 0); + } + unitree_go__msg__BmsCmd * ros_message = _ros_message; + { // off + PyObject * field = PyObject_GetAttrString(_pymsg, "off"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->off = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "reserve"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 3; + uint8_t * dest = ros_message->reserve; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__bms_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of BmsCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._bms_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "BmsCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__BmsCmd * ros_message = (unitree_go__msg__BmsCmd *)raw_ros_message; + { // off + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->off); + { + int rc = PyObject_SetAttrString(_pymessage, "off", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // reserve + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "reserve"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->reserve[0]); + memcpy(dst, src, 3 * sizeof(uint8_t)); + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state.py new file mode 100644 index 0000000..e727d62 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state.py @@ -0,0 +1,357 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/BmsState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'bq_ntc' +# Member 'mcu_ntc' +# Member 'cell_vol' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_BmsState(type): + """Metaclass of message 'BmsState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.BmsState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__bms_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__bms_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__bms_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__bms_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__bms_state + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class BmsState(metaclass=Metaclass_BmsState): + """Message class 'BmsState'.""" + + __slots__ = [ + '_version_high', + '_version_low', + '_status', + '_soc', + '_current', + '_cycle', + '_bq_ntc', + '_mcu_ntc', + '_cell_vol', + ] + + _fields_and_field_types = { + 'version_high': 'uint8', + 'version_low': 'uint8', + 'status': 'uint8', + 'soc': 'uint8', + 'current': 'int32', + 'cycle': 'uint16', + 'bq_ntc': 'int8[2]', + 'mcu_ntc': 'int8[2]', + 'cell_vol': 'uint16[15]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('int32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint16'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('int8'), 2), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('int8'), 2), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint16'), 15), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.version_high = kwargs.get('version_high', int()) + self.version_low = kwargs.get('version_low', int()) + self.status = kwargs.get('status', int()) + self.soc = kwargs.get('soc', int()) + self.current = kwargs.get('current', int()) + self.cycle = kwargs.get('cycle', int()) + if 'bq_ntc' not in kwargs: + self.bq_ntc = numpy.zeros(2, dtype=numpy.int8) + else: + self.bq_ntc = numpy.array(kwargs.get('bq_ntc'), dtype=numpy.int8) + assert self.bq_ntc.shape == (2, ) + if 'mcu_ntc' not in kwargs: + self.mcu_ntc = numpy.zeros(2, dtype=numpy.int8) + else: + self.mcu_ntc = numpy.array(kwargs.get('mcu_ntc'), dtype=numpy.int8) + assert self.mcu_ntc.shape == (2, ) + if 'cell_vol' not in kwargs: + self.cell_vol = numpy.zeros(15, dtype=numpy.uint16) + else: + self.cell_vol = numpy.array(kwargs.get('cell_vol'), dtype=numpy.uint16) + assert self.cell_vol.shape == (15, ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.version_high != other.version_high: + return False + if self.version_low != other.version_low: + return False + if self.status != other.status: + return False + if self.soc != other.soc: + return False + if self.current != other.current: + return False + if self.cycle != other.cycle: + return False + if all(self.bq_ntc != other.bq_ntc): + return False + if all(self.mcu_ntc != other.mcu_ntc): + return False + if all(self.cell_vol != other.cell_vol): + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def version_high(self): + """Message field 'version_high'.""" + return self._version_high + + @version_high.setter + def version_high(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'version_high' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'version_high' field must be an unsigned integer in [0, 255]" + self._version_high = value + + @property + def version_low(self): + """Message field 'version_low'.""" + return self._version_low + + @version_low.setter + def version_low(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'version_low' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'version_low' field must be an unsigned integer in [0, 255]" + self._version_low = value + + @property + def status(self): + """Message field 'status'.""" + return self._status + + @status.setter + def status(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'status' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'status' field must be an unsigned integer in [0, 255]" + self._status = value + + @property + def soc(self): + """Message field 'soc'.""" + return self._soc + + @soc.setter + def soc(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'soc' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'soc' field must be an unsigned integer in [0, 255]" + self._soc = value + + @property + def current(self): + """Message field 'current'.""" + return self._current + + @current.setter + def current(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'current' field must be of type 'int'" + assert value >= -2147483648 and value < 2147483648, \ + "The 'current' field must be an integer in [-2147483648, 2147483647]" + self._current = value + + @property + def cycle(self): + """Message field 'cycle'.""" + return self._cycle + + @cycle.setter + def cycle(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'cycle' field must be of type 'int'" + assert value >= 0 and value < 65536, \ + "The 'cycle' field must be an unsigned integer in [0, 65535]" + self._cycle = value + + @property + def bq_ntc(self): + """Message field 'bq_ntc'.""" + return self._bq_ntc + + @bq_ntc.setter + def bq_ntc(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.int8, \ + "The 'bq_ntc' numpy.ndarray() must have the dtype of 'numpy.int8'" + assert value.size == 2, \ + "The 'bq_ntc' numpy.ndarray() must have a size of 2" + self._bq_ntc = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= -128 and val < 128 for val in value)), \ + "The 'bq_ntc' field must be a set or sequence with length 2 and each value of type 'int' and each integer in [-128, 127]" + self._bq_ntc = numpy.array(value, dtype=numpy.int8) + + @property + def mcu_ntc(self): + """Message field 'mcu_ntc'.""" + return self._mcu_ntc + + @mcu_ntc.setter + def mcu_ntc(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.int8, \ + "The 'mcu_ntc' numpy.ndarray() must have the dtype of 'numpy.int8'" + assert value.size == 2, \ + "The 'mcu_ntc' numpy.ndarray() must have a size of 2" + self._mcu_ntc = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= -128 and val < 128 for val in value)), \ + "The 'mcu_ntc' field must be a set or sequence with length 2 and each value of type 'int' and each integer in [-128, 127]" + self._mcu_ntc = numpy.array(value, dtype=numpy.int8) + + @property + def cell_vol(self): + """Message field 'cell_vol'.""" + return self._cell_vol + + @cell_vol.setter + def cell_vol(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint16, \ + "The 'cell_vol' numpy.ndarray() must have the dtype of 'numpy.uint16'" + assert value.size == 15, \ + "The 'cell_vol' numpy.ndarray() must have a size of 15" + self._cell_vol = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 15 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 65536 for val in value)), \ + "The 'cell_vol' field must be a set or sequence with length 15 and each value of type 'int' and each unsigned integer in [0, 65535]" + self._cell_vol = numpy.array(value, dtype=numpy.uint16) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state_s.c new file mode 100644 index 0000000..6e26973 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_bms_state_s.c @@ -0,0 +1,327 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/bms_state__struct.h" +#include "unitree_go/msg/detail/bms_state__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__bms_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._bms_state.BmsState", full_classname_dest, 34) == 0); + } + unitree_go__msg__BmsState * ros_message = _ros_message; + { // version_high + PyObject * field = PyObject_GetAttrString(_pymsg, "version_high"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->version_high = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // version_low + PyObject * field = PyObject_GetAttrString(_pymsg, "version_low"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->version_low = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // status + PyObject * field = PyObject_GetAttrString(_pymsg, "status"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->status = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // soc + PyObject * field = PyObject_GetAttrString(_pymsg, "soc"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->soc = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // current + PyObject * field = PyObject_GetAttrString(_pymsg, "current"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->current = (int32_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // cycle + PyObject * field = PyObject_GetAttrString(_pymsg, "cycle"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->cycle = (uint16_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // bq_ntc + PyObject * field = PyObject_GetAttrString(_pymsg, "bq_ntc"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT8); + Py_ssize_t size = 2; + int8_t * dest = ros_message->bq_ntc; + for (Py_ssize_t i = 0; i < size; ++i) { + int8_t tmp = *(npy_int8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(int8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // mcu_ntc + PyObject * field = PyObject_GetAttrString(_pymsg, "mcu_ntc"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT8); + Py_ssize_t size = 2; + int8_t * dest = ros_message->mcu_ntc; + for (Py_ssize_t i = 0; i < size; ++i) { + int8_t tmp = *(npy_int8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(int8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // cell_vol + PyObject * field = PyObject_GetAttrString(_pymsg, "cell_vol"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT16); + Py_ssize_t size = 15; + uint16_t * dest = ros_message->cell_vol; + for (Py_ssize_t i = 0; i < size; ++i) { + uint16_t tmp = *(npy_uint16 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint16_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__bms_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of BmsState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._bms_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "BmsState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__BmsState * ros_message = (unitree_go__msg__BmsState *)raw_ros_message; + { // version_high + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->version_high); + { + int rc = PyObject_SetAttrString(_pymessage, "version_high", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // version_low + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->version_low); + { + int rc = PyObject_SetAttrString(_pymessage, "version_low", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // status + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->status); + { + int rc = PyObject_SetAttrString(_pymessage, "status", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // soc + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->soc); + { + int rc = PyObject_SetAttrString(_pymessage, "soc", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // current + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->current); + { + int rc = PyObject_SetAttrString(_pymessage, "current", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // cycle + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->cycle); + { + int rc = PyObject_SetAttrString(_pymessage, "cycle", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // bq_ntc + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "bq_ntc"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT8); + assert(sizeof(npy_int8) == sizeof(int8_t)); + npy_int8 * dst = (npy_int8 *)PyArray_GETPTR1(seq_field, 0); + int8_t * src = &(ros_message->bq_ntc[0]); + memcpy(dst, src, 2 * sizeof(int8_t)); + Py_DECREF(field); + } + { // mcu_ntc + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "mcu_ntc"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT8); + assert(sizeof(npy_int8) == sizeof(int8_t)); + npy_int8 * dst = (npy_int8 *)PyArray_GETPTR1(seq_field, 0); + int8_t * src = &(ros_message->mcu_ntc[0]); + memcpy(dst, src, 2 * sizeof(int8_t)); + Py_DECREF(field); + } + { // cell_vol + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "cell_vol"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT16); + assert(sizeof(npy_uint16) == sizeof(uint16_t)); + npy_uint16 * dst = (npy_uint16 *)PyArray_GETPTR1(seq_field, 0); + uint16_t * src = &(ros_message->cell_vol[0]); + memcpy(dst, src, 15 * sizeof(uint16_t)); + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error.py new file mode 100644 index 0000000..142341a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error.py @@ -0,0 +1,145 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/Error.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Error(type): + """Metaclass of message 'Error'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.Error') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__error + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__error + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__error + cls._TYPE_SUPPORT = module.type_support_msg__msg__error + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__error + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Error(metaclass=Metaclass_Error): + """Message class 'Error'.""" + + __slots__ = [ + '_source', + '_state', + ] + + _fields_and_field_types = { + 'source': 'uint32', + 'state': 'uint32', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.source = kwargs.get('source', int()) + self.state = kwargs.get('state', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.source != other.source: + return False + if self.state != other.state: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def source(self): + """Message field 'source'.""" + return self._source + + @source.setter + def source(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'source' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'source' field must be an unsigned integer in [0, 4294967295]" + self._source = value + + @property + def state(self): + """Message field 'state'.""" + return self._state + + @state.setter + def state(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'state' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'state' field must be an unsigned integer in [0, 4294967295]" + self._state = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error_s.c new file mode 100644 index 0000000..4cafeba --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_error_s.c @@ -0,0 +1,118 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/error__struct.h" +#include "unitree_go/msg/detail/error__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__error__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[28]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._error.Error", full_classname_dest, 27) == 0); + } + unitree_go__msg__Error * ros_message = _ros_message; + { // source + PyObject * field = PyObject_GetAttrString(_pymsg, "source"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->source = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // state + PyObject * field = PyObject_GetAttrString(_pymsg, "state"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->state = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__error__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Error */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._error"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Error"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__Error * ros_message = (unitree_go__msg__Error *)raw_ros_message; + { // source + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->source); + { + int rc = PyObject_SetAttrString(_pymessage, "source", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // state + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->state); + { + int rc = PyObject_SetAttrString(_pymessage, "state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data.py new file mode 100644 index 0000000..81c366c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data.py @@ -0,0 +1,231 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/Go2FrontVideoData.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'video720p' +# Member 'video360p' +# Member 'video180p' +import array # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Go2FrontVideoData(type): + """Metaclass of message 'Go2FrontVideoData'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.Go2FrontVideoData') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__go2_front_video_data + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__go2_front_video_data + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__go2_front_video_data + cls._TYPE_SUPPORT = module.type_support_msg__msg__go2_front_video_data + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__go2_front_video_data + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Go2FrontVideoData(metaclass=Metaclass_Go2FrontVideoData): + """Message class 'Go2FrontVideoData'.""" + + __slots__ = [ + '_time_frame', + '_video720p', + '_video360p', + '_video180p', + ] + + _fields_and_field_types = { + 'time_frame': 'uint64', + 'video720p': 'sequence', + 'video360p': 'sequence', + 'video180p': 'sequence', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint64'), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('uint8')), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('uint8')), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('uint8')), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.time_frame = kwargs.get('time_frame', int()) + self.video720p = array.array('B', kwargs.get('video720p', [])) + self.video360p = array.array('B', kwargs.get('video360p', [])) + self.video180p = array.array('B', kwargs.get('video180p', [])) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.time_frame != other.time_frame: + return False + if self.video720p != other.video720p: + return False + if self.video360p != other.video360p: + return False + if self.video180p != other.video180p: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def time_frame(self): + """Message field 'time_frame'.""" + return self._time_frame + + @time_frame.setter + def time_frame(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'time_frame' field must be of type 'int'" + assert value >= 0 and value < 18446744073709551616, \ + "The 'time_frame' field must be an unsigned integer in [0, 18446744073709551615]" + self._time_frame = value + + @property + def video720p(self): + """Message field 'video720p'.""" + return self._video720p + + @video720p.setter + def video720p(self, value): + if isinstance(value, array.array): + assert value.typecode == 'B', \ + "The 'video720p' array.array() must have the type code of 'B'" + self._video720p = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'video720p' field must be a set or sequence and each value of type 'int' and each unsigned integer in [0, 255]" + self._video720p = array.array('B', value) + + @property + def video360p(self): + """Message field 'video360p'.""" + return self._video360p + + @video360p.setter + def video360p(self, value): + if isinstance(value, array.array): + assert value.typecode == 'B', \ + "The 'video360p' array.array() must have the type code of 'B'" + self._video360p = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'video360p' field must be a set or sequence and each value of type 'int' and each unsigned integer in [0, 255]" + self._video360p = array.array('B', value) + + @property + def video180p(self): + """Message field 'video180p'.""" + return self._video180p + + @video180p.setter + def video180p(self, value): + if isinstance(value, array.array): + assert value.typecode == 'B', \ + "The 'video180p' array.array() must have the type code of 'B'" + self._video180p = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'video180p' field must be a set or sequence and each value of type 'int' and each unsigned integer in [0, 255]" + self._video180p = array.array('B', value) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data_s.c new file mode 100644 index 0000000..2492f40 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_go2_front_video_data_s.c @@ -0,0 +1,461 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/go2_front_video_data__struct.h" +#include "unitree_go/msg/detail/go2_front_video_data__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__go2_front_video_data__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[55]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._go2_front_video_data.Go2FrontVideoData", full_classname_dest, 54) == 0); + } + unitree_go__msg__Go2FrontVideoData * ros_message = _ros_message; + { // time_frame + PyObject * field = PyObject_GetAttrString(_pymsg, "time_frame"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->time_frame = PyLong_AsUnsignedLongLong(field); + Py_DECREF(field); + } + { // video720p + PyObject * field = PyObject_GetAttrString(_pymsg, "video720p"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(uint8_t); + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->video720p), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->video720p.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'video720p'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->video720p), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->video720p.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + uint8_t tmp = (uint8_t)PyLong_AsUnsignedLong(item); + + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // video360p + PyObject * field = PyObject_GetAttrString(_pymsg, "video360p"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(uint8_t); + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->video360p), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->video360p.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'video360p'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->video360p), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->video360p.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + uint8_t tmp = (uint8_t)PyLong_AsUnsignedLong(item); + + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // video180p + PyObject * field = PyObject_GetAttrString(_pymsg, "video180p"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(uint8_t); + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->video180p), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->video180p.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'video180p'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->video180p), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->video180p.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + uint8_t tmp = (uint8_t)PyLong_AsUnsignedLong(item); + + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__go2_front_video_data__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Go2FrontVideoData */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._go2_front_video_data"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Go2FrontVideoData"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__Go2FrontVideoData * ros_message = (unitree_go__msg__Go2FrontVideoData *)raw_ros_message; + { // time_frame + PyObject * field = NULL; + field = PyLong_FromUnsignedLongLong(ros_message->time_frame); + { + int rc = PyObject_SetAttrString(_pymessage, "time_frame", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // video720p + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "video720p"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(uint8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->video720p.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + uint8_t * src = &(ros_message->video720p.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->video720p.size * sizeof(uint8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + { // video360p + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "video360p"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(uint8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->video360p.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + uint8_t * src = &(ros_message->video360p.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->video360p.size * sizeof(uint8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + { // video180p + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "video180p"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(uint8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->video180p.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + uint8_t * src = &(ros_message->video180p.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->video180p.size * sizeof(uint8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map.py new file mode 100644 index 0000000..935feda --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map.py @@ -0,0 +1,283 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/HeightMap.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'data' +import array # noqa: E402, I100 + +# Member 'origin' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_HeightMap(type): + """Metaclass of message 'HeightMap'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.HeightMap') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__height_map + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__height_map + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__height_map + cls._TYPE_SUPPORT = module.type_support_msg__msg__height_map + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__height_map + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class HeightMap(metaclass=Metaclass_HeightMap): + """Message class 'HeightMap'.""" + + __slots__ = [ + '_stamp', + '_frame_id', + '_resolution', + '_width', + '_height', + '_origin', + '_data', + ] + + _fields_and_field_types = { + 'stamp': 'double', + 'frame_id': 'string', + 'resolution': 'float', + 'width': 'uint32', + 'height': 'uint32', + 'origin': 'float[2]', + 'data': 'sequence', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 2), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('float')), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.stamp = kwargs.get('stamp', float()) + self.frame_id = kwargs.get('frame_id', str()) + self.resolution = kwargs.get('resolution', float()) + self.width = kwargs.get('width', int()) + self.height = kwargs.get('height', int()) + if 'origin' not in kwargs: + self.origin = numpy.zeros(2, dtype=numpy.float32) + else: + self.origin = numpy.array(kwargs.get('origin'), dtype=numpy.float32) + assert self.origin.shape == (2, ) + self.data = array.array('f', kwargs.get('data', [])) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.stamp != other.stamp: + return False + if self.frame_id != other.frame_id: + return False + if self.resolution != other.resolution: + return False + if self.width != other.width: + return False + if self.height != other.height: + return False + if all(self.origin != other.origin): + return False + if self.data != other.data: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def stamp(self): + """Message field 'stamp'.""" + return self._stamp + + @stamp.setter + def stamp(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'stamp' field must be of type 'float'" + self._stamp = value + + @property + def frame_id(self): + """Message field 'frame_id'.""" + return self._frame_id + + @frame_id.setter + def frame_id(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'frame_id' field must be of type 'str'" + self._frame_id = value + + @property + def resolution(self): + """Message field 'resolution'.""" + return self._resolution + + @resolution.setter + def resolution(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'resolution' field must be of type 'float'" + self._resolution = value + + @property + def width(self): + """Message field 'width'.""" + return self._width + + @width.setter + def width(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'width' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'width' field must be an unsigned integer in [0, 4294967295]" + self._width = value + + @property + def height(self): + """Message field 'height'.""" + return self._height + + @height.setter + def height(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'height' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'height' field must be an unsigned integer in [0, 4294967295]" + self._height = value + + @property + def origin(self): + """Message field 'origin'.""" + return self._origin + + @origin.setter + def origin(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'origin' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 2, \ + "The 'origin' numpy.ndarray() must have a size of 2" + self._origin = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'origin' field must be a set or sequence with length 2 and each value of type 'float'" + self._origin = numpy.array(value, dtype=numpy.float32) + + @property + def data(self): + """Message field 'data'.""" + return self._data + + @data.setter + def data(self, value): + if isinstance(value, array.array): + assert value.typecode == 'f', \ + "The 'data' array.array() must have the type code of 'f'" + self._data = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, float) for v in value) and + True), \ + "The 'data' field must be a set or sequence and each value of type 'float'" + self._data = array.array('f', value) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map_s.c new file mode 100644 index 0000000..c8b312c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_height_map_s.c @@ -0,0 +1,357 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/height_map__struct.h" +#include "unitree_go/msg/detail/height_map__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__height_map__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[37]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._height_map.HeightMap", full_classname_dest, 36) == 0); + } + unitree_go__msg__HeightMap * ros_message = _ros_message; + { // stamp + PyObject * field = PyObject_GetAttrString(_pymsg, "stamp"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->stamp = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // frame_id + PyObject * field = PyObject_GetAttrString(_pymsg, "frame_id"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->frame_id, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // resolution + PyObject * field = PyObject_GetAttrString(_pymsg, "resolution"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->resolution = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // width + PyObject * field = PyObject_GetAttrString(_pymsg, "width"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->width = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // height + PyObject * field = PyObject_GetAttrString(_pymsg, "height"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->height = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // origin + PyObject * field = PyObject_GetAttrString(_pymsg, "origin"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 2; + float * dest = ros_message->origin; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // data + PyObject * field = PyObject_GetAttrString(_pymsg, "data"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(float); + if (!rosidl_runtime_c__float__Sequence__init(&(ros_message->data), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create float__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + float * dest = ros_message->data.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'data'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__float__Sequence__init(&(ros_message->data), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create float__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + float * dest = ros_message->data.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyFloat_Check(item)); + float tmp = (float)PyFloat_AS_DOUBLE(item); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__height_map__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of HeightMap */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._height_map"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "HeightMap"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__HeightMap * ros_message = (unitree_go__msg__HeightMap *)raw_ros_message; + { // stamp + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->stamp); + { + int rc = PyObject_SetAttrString(_pymessage, "stamp", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // frame_id + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->frame_id.data, + strlen(ros_message->frame_id.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "frame_id", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // resolution + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->resolution); + { + int rc = PyObject_SetAttrString(_pymessage, "resolution", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // width + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->width); + { + int rc = PyObject_SetAttrString(_pymessage, "width", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // height + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->height); + { + int rc = PyObject_SetAttrString(_pymessage, "height", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // origin + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "origin"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->origin[0]); + memcpy(dst, src, 2 * sizeof(float)); + Py_DECREF(field); + } + { // data + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "data"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(float)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->data.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + float * src = &(ros_message->data.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->data.size * sizeof(float)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state.py new file mode 100644 index 0000000..78f6d31 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state.py @@ -0,0 +1,294 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/IMUState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'quaternion' +# Member 'gyroscope' +# Member 'accelerometer' +# Member 'rpy' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_IMUState(type): + """Metaclass of message 'IMUState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.IMUState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__imu_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__imu_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__imu_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__imu_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__imu_state + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class IMUState(metaclass=Metaclass_IMUState): + """Message class 'IMUState'.""" + + __slots__ = [ + '_quaternion', + '_gyroscope', + '_accelerometer', + '_rpy', + '_temperature', + ] + + _fields_and_field_types = { + 'quaternion': 'float[4]', + 'gyroscope': 'float[3]', + 'accelerometer': 'float[3]', + 'rpy': 'float[3]', + 'temperature': 'int8', + } + + SLOT_TYPES = ( + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 4), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.BasicType('int8'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + if 'quaternion' not in kwargs: + self.quaternion = numpy.zeros(4, dtype=numpy.float32) + else: + self.quaternion = numpy.array(kwargs.get('quaternion'), dtype=numpy.float32) + assert self.quaternion.shape == (4, ) + if 'gyroscope' not in kwargs: + self.gyroscope = numpy.zeros(3, dtype=numpy.float32) + else: + self.gyroscope = numpy.array(kwargs.get('gyroscope'), dtype=numpy.float32) + assert self.gyroscope.shape == (3, ) + if 'accelerometer' not in kwargs: + self.accelerometer = numpy.zeros(3, dtype=numpy.float32) + else: + self.accelerometer = numpy.array(kwargs.get('accelerometer'), dtype=numpy.float32) + assert self.accelerometer.shape == (3, ) + if 'rpy' not in kwargs: + self.rpy = numpy.zeros(3, dtype=numpy.float32) + else: + self.rpy = numpy.array(kwargs.get('rpy'), dtype=numpy.float32) + assert self.rpy.shape == (3, ) + self.temperature = kwargs.get('temperature', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if all(self.quaternion != other.quaternion): + return False + if all(self.gyroscope != other.gyroscope): + return False + if all(self.accelerometer != other.accelerometer): + return False + if all(self.rpy != other.rpy): + return False + if self.temperature != other.temperature: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def quaternion(self): + """Message field 'quaternion'.""" + return self._quaternion + + @quaternion.setter + def quaternion(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'quaternion' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 4, \ + "The 'quaternion' numpy.ndarray() must have a size of 4" + self._quaternion = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 4 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'quaternion' field must be a set or sequence with length 4 and each value of type 'float'" + self._quaternion = numpy.array(value, dtype=numpy.float32) + + @property + def gyroscope(self): + """Message field 'gyroscope'.""" + return self._gyroscope + + @gyroscope.setter + def gyroscope(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'gyroscope' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'gyroscope' numpy.ndarray() must have a size of 3" + self._gyroscope = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'gyroscope' field must be a set or sequence with length 3 and each value of type 'float'" + self._gyroscope = numpy.array(value, dtype=numpy.float32) + + @property + def accelerometer(self): + """Message field 'accelerometer'.""" + return self._accelerometer + + @accelerometer.setter + def accelerometer(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'accelerometer' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'accelerometer' numpy.ndarray() must have a size of 3" + self._accelerometer = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'accelerometer' field must be a set or sequence with length 3 and each value of type 'float'" + self._accelerometer = numpy.array(value, dtype=numpy.float32) + + @property + def rpy(self): + """Message field 'rpy'.""" + return self._rpy + + @rpy.setter + def rpy(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'rpy' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'rpy' numpy.ndarray() must have a size of 3" + self._rpy = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'rpy' field must be a set or sequence with length 3 and each value of type 'float'" + self._rpy = numpy.array(value, dtype=numpy.float32) + + @property + def temperature(self): + """Message field 'temperature'.""" + return self._temperature + + @temperature.setter + def temperature(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'temperature' field must be of type 'int'" + assert value >= -128 and value < 128, \ + "The 'temperature' field must be an integer in [-128, 127]" + self._temperature = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state_s.c new file mode 100644 index 0000000..55cdeb7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_imu_state_s.c @@ -0,0 +1,269 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/imu_state__struct.h" +#include "unitree_go/msg/detail/imu_state__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__imu_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._imu_state.IMUState", full_classname_dest, 34) == 0); + } + unitree_go__msg__IMUState * ros_message = _ros_message; + { // quaternion + PyObject * field = PyObject_GetAttrString(_pymsg, "quaternion"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 4; + float * dest = ros_message->quaternion; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // gyroscope + PyObject * field = PyObject_GetAttrString(_pymsg, "gyroscope"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->gyroscope; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // accelerometer + PyObject * field = PyObject_GetAttrString(_pymsg, "accelerometer"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->accelerometer; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // rpy + PyObject * field = PyObject_GetAttrString(_pymsg, "rpy"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->rpy; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // temperature + PyObject * field = PyObject_GetAttrString(_pymsg, "temperature"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->temperature = (int8_t)PyLong_AsLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__imu_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of IMUState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._imu_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "IMUState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__IMUState * ros_message = (unitree_go__msg__IMUState *)raw_ros_message; + { // quaternion + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "quaternion"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->quaternion[0]); + memcpy(dst, src, 4 * sizeof(float)); + Py_DECREF(field); + } + { // gyroscope + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "gyroscope"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->gyroscope[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // accelerometer + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "accelerometer"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->accelerometer[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // rpy + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "rpy"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->rpy[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // temperature + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->temperature); + { + int rc = PyObject_SetAttrString(_pymessage, "temperature", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config.py new file mode 100644 index 0000000..cee6940 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config.py @@ -0,0 +1,189 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/InterfaceConfig.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'reserve' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_InterfaceConfig(type): + """Metaclass of message 'InterfaceConfig'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.InterfaceConfig') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__interface_config + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__interface_config + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__interface_config + cls._TYPE_SUPPORT = module.type_support_msg__msg__interface_config + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__interface_config + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class InterfaceConfig(metaclass=Metaclass_InterfaceConfig): + """Message class 'InterfaceConfig'.""" + + __slots__ = [ + '_mode', + '_value', + '_reserve', + ] + + _fields_and_field_types = { + 'mode': 'uint8', + 'value': 'uint8', + 'reserve': 'uint8[2]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 2), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.mode = kwargs.get('mode', int()) + self.value = kwargs.get('value', int()) + if 'reserve' not in kwargs: + self.reserve = numpy.zeros(2, dtype=numpy.uint8) + else: + self.reserve = numpy.array(kwargs.get('reserve'), dtype=numpy.uint8) + assert self.reserve.shape == (2, ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.mode != other.mode: + return False + if self.value != other.value: + return False + if all(self.reserve != other.reserve): + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def mode(self): + """Message field 'mode'.""" + return self._mode + + @mode.setter + def mode(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'mode' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'mode' field must be an unsigned integer in [0, 255]" + self._mode = value + + @property + def value(self): + """Message field 'value'.""" + return self._value + + @value.setter + def value(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'value' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'value' field must be an unsigned integer in [0, 255]" + self._value = value + + @property + def reserve(self): + """Message field 'reserve'.""" + return self._reserve + + @reserve.setter + def reserve(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'reserve' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 2, \ + "The 'reserve' numpy.ndarray() must have a size of 2" + self._reserve = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'reserve' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 255]" + self._reserve = numpy.array(value, dtype=numpy.uint8) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config_s.c new file mode 100644 index 0000000..024a5c5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_interface_config_s.c @@ -0,0 +1,163 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/interface_config__struct.h" +#include "unitree_go/msg/detail/interface_config__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__interface_config__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[49]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._interface_config.InterfaceConfig", full_classname_dest, 48) == 0); + } + unitree_go__msg__InterfaceConfig * ros_message = _ros_message; + { // mode + PyObject * field = PyObject_GetAttrString(_pymsg, "mode"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->mode = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // value + PyObject * field = PyObject_GetAttrString(_pymsg, "value"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->value = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "reserve"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 2; + uint8_t * dest = ros_message->reserve; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__interface_config__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of InterfaceConfig */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._interface_config"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "InterfaceConfig"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__InterfaceConfig * ros_message = (unitree_go__msg__InterfaceConfig *)raw_ros_message; + { // mode + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->mode); + { + int rc = PyObject_SetAttrString(_pymessage, "mode", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // value + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->value); + { + int rc = PyObject_SetAttrString(_pymessage, "value", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // reserve + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "reserve"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->reserve[0]); + memcpy(dst, src, 2 * sizeof(uint8_t)); + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state.py new file mode 100644 index 0000000..6b6da0b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state.py @@ -0,0 +1,461 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/LidarState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'imu_rpy' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_LidarState(type): + """Metaclass of message 'LidarState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.LidarState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__lidar_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__lidar_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__lidar_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__lidar_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__lidar_state + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class LidarState(metaclass=Metaclass_LidarState): + """Message class 'LidarState'.""" + + __slots__ = [ + '_stamp', + '_firmware_version', + '_software_version', + '_sdk_version', + '_sys_rotation_speed', + '_com_rotation_speed', + '_error_state', + '_cloud_frequency', + '_cloud_packet_loss_rate', + '_cloud_size', + '_cloud_scan_num', + '_imu_frequency', + '_imu_packet_loss_rate', + '_imu_rpy', + '_serial_recv_stamp', + '_serial_buffer_size', + '_serial_buffer_read', + ] + + _fields_and_field_types = { + 'stamp': 'double', + 'firmware_version': 'string', + 'software_version': 'string', + 'sdk_version': 'string', + 'sys_rotation_speed': 'float', + 'com_rotation_speed': 'float', + 'error_state': 'uint8', + 'cloud_frequency': 'float', + 'cloud_packet_loss_rate': 'float', + 'cloud_size': 'uint32', + 'cloud_scan_num': 'uint32', + 'imu_frequency': 'float', + 'imu_packet_loss_rate': 'float', + 'imu_rpy': 'float[3]', + 'serial_recv_stamp': 'double', + 'serial_buffer_size': 'uint32', + 'serial_buffer_read': 'uint32', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.BasicType('double'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.stamp = kwargs.get('stamp', float()) + self.firmware_version = kwargs.get('firmware_version', str()) + self.software_version = kwargs.get('software_version', str()) + self.sdk_version = kwargs.get('sdk_version', str()) + self.sys_rotation_speed = kwargs.get('sys_rotation_speed', float()) + self.com_rotation_speed = kwargs.get('com_rotation_speed', float()) + self.error_state = kwargs.get('error_state', int()) + self.cloud_frequency = kwargs.get('cloud_frequency', float()) + self.cloud_packet_loss_rate = kwargs.get('cloud_packet_loss_rate', float()) + self.cloud_size = kwargs.get('cloud_size', int()) + self.cloud_scan_num = kwargs.get('cloud_scan_num', int()) + self.imu_frequency = kwargs.get('imu_frequency', float()) + self.imu_packet_loss_rate = kwargs.get('imu_packet_loss_rate', float()) + if 'imu_rpy' not in kwargs: + self.imu_rpy = numpy.zeros(3, dtype=numpy.float32) + else: + self.imu_rpy = numpy.array(kwargs.get('imu_rpy'), dtype=numpy.float32) + assert self.imu_rpy.shape == (3, ) + self.serial_recv_stamp = kwargs.get('serial_recv_stamp', float()) + self.serial_buffer_size = kwargs.get('serial_buffer_size', int()) + self.serial_buffer_read = kwargs.get('serial_buffer_read', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.stamp != other.stamp: + return False + if self.firmware_version != other.firmware_version: + return False + if self.software_version != other.software_version: + return False + if self.sdk_version != other.sdk_version: + return False + if self.sys_rotation_speed != other.sys_rotation_speed: + return False + if self.com_rotation_speed != other.com_rotation_speed: + return False + if self.error_state != other.error_state: + return False + if self.cloud_frequency != other.cloud_frequency: + return False + if self.cloud_packet_loss_rate != other.cloud_packet_loss_rate: + return False + if self.cloud_size != other.cloud_size: + return False + if self.cloud_scan_num != other.cloud_scan_num: + return False + if self.imu_frequency != other.imu_frequency: + return False + if self.imu_packet_loss_rate != other.imu_packet_loss_rate: + return False + if all(self.imu_rpy != other.imu_rpy): + return False + if self.serial_recv_stamp != other.serial_recv_stamp: + return False + if self.serial_buffer_size != other.serial_buffer_size: + return False + if self.serial_buffer_read != other.serial_buffer_read: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def stamp(self): + """Message field 'stamp'.""" + return self._stamp + + @stamp.setter + def stamp(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'stamp' field must be of type 'float'" + self._stamp = value + + @property + def firmware_version(self): + """Message field 'firmware_version'.""" + return self._firmware_version + + @firmware_version.setter + def firmware_version(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'firmware_version' field must be of type 'str'" + self._firmware_version = value + + @property + def software_version(self): + """Message field 'software_version'.""" + return self._software_version + + @software_version.setter + def software_version(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'software_version' field must be of type 'str'" + self._software_version = value + + @property + def sdk_version(self): + """Message field 'sdk_version'.""" + return self._sdk_version + + @sdk_version.setter + def sdk_version(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'sdk_version' field must be of type 'str'" + self._sdk_version = value + + @property + def sys_rotation_speed(self): + """Message field 'sys_rotation_speed'.""" + return self._sys_rotation_speed + + @sys_rotation_speed.setter + def sys_rotation_speed(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'sys_rotation_speed' field must be of type 'float'" + self._sys_rotation_speed = value + + @property + def com_rotation_speed(self): + """Message field 'com_rotation_speed'.""" + return self._com_rotation_speed + + @com_rotation_speed.setter + def com_rotation_speed(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'com_rotation_speed' field must be of type 'float'" + self._com_rotation_speed = value + + @property + def error_state(self): + """Message field 'error_state'.""" + return self._error_state + + @error_state.setter + def error_state(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'error_state' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'error_state' field must be an unsigned integer in [0, 255]" + self._error_state = value + + @property + def cloud_frequency(self): + """Message field 'cloud_frequency'.""" + return self._cloud_frequency + + @cloud_frequency.setter + def cloud_frequency(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'cloud_frequency' field must be of type 'float'" + self._cloud_frequency = value + + @property + def cloud_packet_loss_rate(self): + """Message field 'cloud_packet_loss_rate'.""" + return self._cloud_packet_loss_rate + + @cloud_packet_loss_rate.setter + def cloud_packet_loss_rate(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'cloud_packet_loss_rate' field must be of type 'float'" + self._cloud_packet_loss_rate = value + + @property + def cloud_size(self): + """Message field 'cloud_size'.""" + return self._cloud_size + + @cloud_size.setter + def cloud_size(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'cloud_size' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'cloud_size' field must be an unsigned integer in [0, 4294967295]" + self._cloud_size = value + + @property + def cloud_scan_num(self): + """Message field 'cloud_scan_num'.""" + return self._cloud_scan_num + + @cloud_scan_num.setter + def cloud_scan_num(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'cloud_scan_num' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'cloud_scan_num' field must be an unsigned integer in [0, 4294967295]" + self._cloud_scan_num = value + + @property + def imu_frequency(self): + """Message field 'imu_frequency'.""" + return self._imu_frequency + + @imu_frequency.setter + def imu_frequency(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'imu_frequency' field must be of type 'float'" + self._imu_frequency = value + + @property + def imu_packet_loss_rate(self): + """Message field 'imu_packet_loss_rate'.""" + return self._imu_packet_loss_rate + + @imu_packet_loss_rate.setter + def imu_packet_loss_rate(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'imu_packet_loss_rate' field must be of type 'float'" + self._imu_packet_loss_rate = value + + @property + def imu_rpy(self): + """Message field 'imu_rpy'.""" + return self._imu_rpy + + @imu_rpy.setter + def imu_rpy(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'imu_rpy' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'imu_rpy' numpy.ndarray() must have a size of 3" + self._imu_rpy = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'imu_rpy' field must be a set or sequence with length 3 and each value of type 'float'" + self._imu_rpy = numpy.array(value, dtype=numpy.float32) + + @property + def serial_recv_stamp(self): + """Message field 'serial_recv_stamp'.""" + return self._serial_recv_stamp + + @serial_recv_stamp.setter + def serial_recv_stamp(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'serial_recv_stamp' field must be of type 'float'" + self._serial_recv_stamp = value + + @property + def serial_buffer_size(self): + """Message field 'serial_buffer_size'.""" + return self._serial_buffer_size + + @serial_buffer_size.setter + def serial_buffer_size(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'serial_buffer_size' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'serial_buffer_size' field must be an unsigned integer in [0, 4294967295]" + self._serial_buffer_size = value + + @property + def serial_buffer_read(self): + """Message field 'serial_buffer_read'.""" + return self._serial_buffer_read + + @serial_buffer_read.setter + def serial_buffer_read(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'serial_buffer_read' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'serial_buffer_read' field must be an unsigned integer in [0, 4294967295]" + self._serial_buffer_read = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state_s.c new file mode 100644 index 0000000..fe94967 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_lidar_state_s.c @@ -0,0 +1,482 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/lidar_state__struct.h" +#include "unitree_go/msg/detail/lidar_state__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__lidar_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[39]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._lidar_state.LidarState", full_classname_dest, 38) == 0); + } + unitree_go__msg__LidarState * ros_message = _ros_message; + { // stamp + PyObject * field = PyObject_GetAttrString(_pymsg, "stamp"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->stamp = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // firmware_version + PyObject * field = PyObject_GetAttrString(_pymsg, "firmware_version"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->firmware_version, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // software_version + PyObject * field = PyObject_GetAttrString(_pymsg, "software_version"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->software_version, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // sdk_version + PyObject * field = PyObject_GetAttrString(_pymsg, "sdk_version"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->sdk_version, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // sys_rotation_speed + PyObject * field = PyObject_GetAttrString(_pymsg, "sys_rotation_speed"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->sys_rotation_speed = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // com_rotation_speed + PyObject * field = PyObject_GetAttrString(_pymsg, "com_rotation_speed"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->com_rotation_speed = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // error_state + PyObject * field = PyObject_GetAttrString(_pymsg, "error_state"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->error_state = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // cloud_frequency + PyObject * field = PyObject_GetAttrString(_pymsg, "cloud_frequency"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->cloud_frequency = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // cloud_packet_loss_rate + PyObject * field = PyObject_GetAttrString(_pymsg, "cloud_packet_loss_rate"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->cloud_packet_loss_rate = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // cloud_size + PyObject * field = PyObject_GetAttrString(_pymsg, "cloud_size"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->cloud_size = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // cloud_scan_num + PyObject * field = PyObject_GetAttrString(_pymsg, "cloud_scan_num"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->cloud_scan_num = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // imu_frequency + PyObject * field = PyObject_GetAttrString(_pymsg, "imu_frequency"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->imu_frequency = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // imu_packet_loss_rate + PyObject * field = PyObject_GetAttrString(_pymsg, "imu_packet_loss_rate"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->imu_packet_loss_rate = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // imu_rpy + PyObject * field = PyObject_GetAttrString(_pymsg, "imu_rpy"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->imu_rpy; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // serial_recv_stamp + PyObject * field = PyObject_GetAttrString(_pymsg, "serial_recv_stamp"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->serial_recv_stamp = PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // serial_buffer_size + PyObject * field = PyObject_GetAttrString(_pymsg, "serial_buffer_size"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->serial_buffer_size = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // serial_buffer_read + PyObject * field = PyObject_GetAttrString(_pymsg, "serial_buffer_read"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->serial_buffer_read = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__lidar_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of LidarState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._lidar_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LidarState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__LidarState * ros_message = (unitree_go__msg__LidarState *)raw_ros_message; + { // stamp + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->stamp); + { + int rc = PyObject_SetAttrString(_pymessage, "stamp", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // firmware_version + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->firmware_version.data, + strlen(ros_message->firmware_version.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "firmware_version", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // software_version + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->software_version.data, + strlen(ros_message->software_version.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "software_version", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // sdk_version + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->sdk_version.data, + strlen(ros_message->sdk_version.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "sdk_version", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // sys_rotation_speed + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->sys_rotation_speed); + { + int rc = PyObject_SetAttrString(_pymessage, "sys_rotation_speed", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // com_rotation_speed + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->com_rotation_speed); + { + int rc = PyObject_SetAttrString(_pymessage, "com_rotation_speed", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // error_state + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->error_state); + { + int rc = PyObject_SetAttrString(_pymessage, "error_state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // cloud_frequency + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->cloud_frequency); + { + int rc = PyObject_SetAttrString(_pymessage, "cloud_frequency", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // cloud_packet_loss_rate + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->cloud_packet_loss_rate); + { + int rc = PyObject_SetAttrString(_pymessage, "cloud_packet_loss_rate", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // cloud_size + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->cloud_size); + { + int rc = PyObject_SetAttrString(_pymessage, "cloud_size", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // cloud_scan_num + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->cloud_scan_num); + { + int rc = PyObject_SetAttrString(_pymessage, "cloud_scan_num", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // imu_frequency + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->imu_frequency); + { + int rc = PyObject_SetAttrString(_pymessage, "imu_frequency", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // imu_packet_loss_rate + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->imu_packet_loss_rate); + { + int rc = PyObject_SetAttrString(_pymessage, "imu_packet_loss_rate", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // imu_rpy + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "imu_rpy"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->imu_rpy[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // serial_recv_stamp + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->serial_recv_stamp); + { + int rc = PyObject_SetAttrString(_pymessage, "serial_recv_stamp", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // serial_buffer_size + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->serial_buffer_size); + { + int rc = PyObject_SetAttrString(_pymessage, "serial_buffer_size", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // serial_buffer_read + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->serial_buffer_read); + { + int rc = PyObject_SetAttrString(_pymessage, "serial_buffer_read", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd.py new file mode 100644 index 0000000..566e4de --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd.py @@ -0,0 +1,547 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/LowCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'head' +# Member 'sn' +# Member 'version' +# Member 'wireless_remote' +# Member 'led' +# Member 'fan' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_LowCmd(type): + """Metaclass of message 'LowCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.LowCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__low_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__low_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__low_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__low_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__low_cmd + + from unitree_go.msg import BmsCmd + if BmsCmd.__class__._TYPE_SUPPORT is None: + BmsCmd.__class__.__import_type_support__() + + from unitree_go.msg import MotorCmd + if MotorCmd.__class__._TYPE_SUPPORT is None: + MotorCmd.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class LowCmd(metaclass=Metaclass_LowCmd): + """Message class 'LowCmd'.""" + + __slots__ = [ + '_head', + '_level_flag', + '_frame_reserve', + '_sn', + '_version', + '_bandwidth', + '_motor_cmd', + '_bms_cmd', + '_wireless_remote', + '_led', + '_fan', + '_gpio', + '_reserve', + '_crc', + ] + + _fields_and_field_types = { + 'head': 'uint8[2]', + 'level_flag': 'uint8', + 'frame_reserve': 'uint8', + 'sn': 'uint32[2]', + 'version': 'uint32[2]', + 'bandwidth': 'uint16', + 'motor_cmd': 'unitree_go/MotorCmd[20]', + 'bms_cmd': 'unitree_go/BmsCmd', + 'wireless_remote': 'uint8[40]', + 'led': 'uint8[12]', + 'fan': 'uint8[2]', + 'gpio': 'uint8', + 'reserve': 'uint32', + 'crc': 'uint32', + } + + SLOT_TYPES = ( + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint32'), 2), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint32'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint16'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'MotorCmd'), 20), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'BmsCmd'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 40), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 12), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + if 'head' not in kwargs: + self.head = numpy.zeros(2, dtype=numpy.uint8) + else: + self.head = numpy.array(kwargs.get('head'), dtype=numpy.uint8) + assert self.head.shape == (2, ) + self.level_flag = kwargs.get('level_flag', int()) + self.frame_reserve = kwargs.get('frame_reserve', int()) + if 'sn' not in kwargs: + self.sn = numpy.zeros(2, dtype=numpy.uint32) + else: + self.sn = numpy.array(kwargs.get('sn'), dtype=numpy.uint32) + assert self.sn.shape == (2, ) + if 'version' not in kwargs: + self.version = numpy.zeros(2, dtype=numpy.uint32) + else: + self.version = numpy.array(kwargs.get('version'), dtype=numpy.uint32) + assert self.version.shape == (2, ) + self.bandwidth = kwargs.get('bandwidth', int()) + from unitree_go.msg import MotorCmd + self.motor_cmd = kwargs.get( + 'motor_cmd', + [MotorCmd() for x in range(20)] + ) + from unitree_go.msg import BmsCmd + self.bms_cmd = kwargs.get('bms_cmd', BmsCmd()) + if 'wireless_remote' not in kwargs: + self.wireless_remote = numpy.zeros(40, dtype=numpy.uint8) + else: + self.wireless_remote = numpy.array(kwargs.get('wireless_remote'), dtype=numpy.uint8) + assert self.wireless_remote.shape == (40, ) + if 'led' not in kwargs: + self.led = numpy.zeros(12, dtype=numpy.uint8) + else: + self.led = numpy.array(kwargs.get('led'), dtype=numpy.uint8) + assert self.led.shape == (12, ) + if 'fan' not in kwargs: + self.fan = numpy.zeros(2, dtype=numpy.uint8) + else: + self.fan = numpy.array(kwargs.get('fan'), dtype=numpy.uint8) + assert self.fan.shape == (2, ) + self.gpio = kwargs.get('gpio', int()) + self.reserve = kwargs.get('reserve', int()) + self.crc = kwargs.get('crc', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if all(self.head != other.head): + return False + if self.level_flag != other.level_flag: + return False + if self.frame_reserve != other.frame_reserve: + return False + if all(self.sn != other.sn): + return False + if all(self.version != other.version): + return False + if self.bandwidth != other.bandwidth: + return False + if self.motor_cmd != other.motor_cmd: + return False + if self.bms_cmd != other.bms_cmd: + return False + if all(self.wireless_remote != other.wireless_remote): + return False + if all(self.led != other.led): + return False + if all(self.fan != other.fan): + return False + if self.gpio != other.gpio: + return False + if self.reserve != other.reserve: + return False + if self.crc != other.crc: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def head(self): + """Message field 'head'.""" + return self._head + + @head.setter + def head(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'head' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 2, \ + "The 'head' numpy.ndarray() must have a size of 2" + self._head = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'head' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 255]" + self._head = numpy.array(value, dtype=numpy.uint8) + + @property + def level_flag(self): + """Message field 'level_flag'.""" + return self._level_flag + + @level_flag.setter + def level_flag(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'level_flag' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'level_flag' field must be an unsigned integer in [0, 255]" + self._level_flag = value + + @property + def frame_reserve(self): + """Message field 'frame_reserve'.""" + return self._frame_reserve + + @frame_reserve.setter + def frame_reserve(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'frame_reserve' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'frame_reserve' field must be an unsigned integer in [0, 255]" + self._frame_reserve = value + + @property + def sn(self): + """Message field 'sn'.""" + return self._sn + + @sn.setter + def sn(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint32, \ + "The 'sn' numpy.ndarray() must have the dtype of 'numpy.uint32'" + assert value.size == 2, \ + "The 'sn' numpy.ndarray() must have a size of 2" + self._sn = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 4294967296 for val in value)), \ + "The 'sn' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 4294967295]" + self._sn = numpy.array(value, dtype=numpy.uint32) + + @property + def version(self): + """Message field 'version'.""" + return self._version + + @version.setter + def version(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint32, \ + "The 'version' numpy.ndarray() must have the dtype of 'numpy.uint32'" + assert value.size == 2, \ + "The 'version' numpy.ndarray() must have a size of 2" + self._version = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 4294967296 for val in value)), \ + "The 'version' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 4294967295]" + self._version = numpy.array(value, dtype=numpy.uint32) + + @property + def bandwidth(self): + """Message field 'bandwidth'.""" + return self._bandwidth + + @bandwidth.setter + def bandwidth(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'bandwidth' field must be of type 'int'" + assert value >= 0 and value < 65536, \ + "The 'bandwidth' field must be an unsigned integer in [0, 65535]" + self._bandwidth = value + + @property + def motor_cmd(self): + """Message field 'motor_cmd'.""" + return self._motor_cmd + + @motor_cmd.setter + def motor_cmd(self, value): + if __debug__: + from unitree_go.msg import MotorCmd + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 20 and + all(isinstance(v, MotorCmd) for v in value) and + True), \ + "The 'motor_cmd' field must be a set or sequence with length 20 and each value of type 'MotorCmd'" + self._motor_cmd = value + + @property + def bms_cmd(self): + """Message field 'bms_cmd'.""" + return self._bms_cmd + + @bms_cmd.setter + def bms_cmd(self, value): + if __debug__: + from unitree_go.msg import BmsCmd + assert \ + isinstance(value, BmsCmd), \ + "The 'bms_cmd' field must be a sub message of type 'BmsCmd'" + self._bms_cmd = value + + @property + def wireless_remote(self): + """Message field 'wireless_remote'.""" + return self._wireless_remote + + @wireless_remote.setter + def wireless_remote(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'wireless_remote' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 40, \ + "The 'wireless_remote' numpy.ndarray() must have a size of 40" + self._wireless_remote = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 40 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'wireless_remote' field must be a set or sequence with length 40 and each value of type 'int' and each unsigned integer in [0, 255]" + self._wireless_remote = numpy.array(value, dtype=numpy.uint8) + + @property + def led(self): + """Message field 'led'.""" + return self._led + + @led.setter + def led(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'led' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 12, \ + "The 'led' numpy.ndarray() must have a size of 12" + self._led = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 12 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'led' field must be a set or sequence with length 12 and each value of type 'int' and each unsigned integer in [0, 255]" + self._led = numpy.array(value, dtype=numpy.uint8) + + @property + def fan(self): + """Message field 'fan'.""" + return self._fan + + @fan.setter + def fan(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'fan' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 2, \ + "The 'fan' numpy.ndarray() must have a size of 2" + self._fan = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'fan' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 255]" + self._fan = numpy.array(value, dtype=numpy.uint8) + + @property + def gpio(self): + """Message field 'gpio'.""" + return self._gpio + + @gpio.setter + def gpio(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'gpio' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'gpio' field must be an unsigned integer in [0, 255]" + self._gpio = value + + @property + def reserve(self): + """Message field 'reserve'.""" + return self._reserve + + @reserve.setter + def reserve(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'reserve' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'reserve' field must be an unsigned integer in [0, 4294967295]" + self._reserve = value + + @property + def crc(self): + """Message field 'crc'.""" + return self._crc + + @crc.setter + def crc(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'crc' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'crc' field must be an unsigned integer in [0, 4294967295]" + self._crc = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd_s.c new file mode 100644 index 0000000..d868365 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_cmd_s.c @@ -0,0 +1,535 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/low_cmd__struct.h" +#include "unitree_go/msg/detail/low_cmd__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +// Nested array functions includes +#include "unitree_go/msg/detail/motor_cmd__functions.h" +// end nested array functions include +bool unitree_go__msg__motor_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__motor_cmd__convert_to_py(void * raw_ros_message); +bool unitree_go__msg__bms_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__bms_cmd__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__low_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[31]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._low_cmd.LowCmd", full_classname_dest, 30) == 0); + } + unitree_go__msg__LowCmd * ros_message = _ros_message; + { // head + PyObject * field = PyObject_GetAttrString(_pymsg, "head"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 2; + uint8_t * dest = ros_message->head; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // level_flag + PyObject * field = PyObject_GetAttrString(_pymsg, "level_flag"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->level_flag = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // frame_reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "frame_reserve"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->frame_reserve = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // sn + PyObject * field = PyObject_GetAttrString(_pymsg, "sn"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + Py_ssize_t size = 2; + uint32_t * dest = ros_message->sn; + for (Py_ssize_t i = 0; i < size; ++i) { + uint32_t tmp = *(npy_uint32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint32_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // version + PyObject * field = PyObject_GetAttrString(_pymsg, "version"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + Py_ssize_t size = 2; + uint32_t * dest = ros_message->version; + for (Py_ssize_t i = 0; i < size; ++i) { + uint32_t tmp = *(npy_uint32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint32_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // bandwidth + PyObject * field = PyObject_GetAttrString(_pymsg, "bandwidth"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->bandwidth = (uint16_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // motor_cmd + PyObject * field = PyObject_GetAttrString(_pymsg, "motor_cmd"); + if (!field) { + return false; + } + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'motor_cmd'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = 20; + unitree_go__msg__MotorCmd * dest = ros_message->motor_cmd; + for (Py_ssize_t i = 0; i < size; ++i) { + if (!unitree_go__msg__motor_cmd__convert_from_py(PySequence_Fast_GET_ITEM(seq_field, i), &dest[i])) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + } + Py_DECREF(seq_field); + Py_DECREF(field); + } + { // bms_cmd + PyObject * field = PyObject_GetAttrString(_pymsg, "bms_cmd"); + if (!field) { + return false; + } + if (!unitree_go__msg__bms_cmd__convert_from_py(field, &ros_message->bms_cmd)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // wireless_remote + PyObject * field = PyObject_GetAttrString(_pymsg, "wireless_remote"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 40; + uint8_t * dest = ros_message->wireless_remote; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // led + PyObject * field = PyObject_GetAttrString(_pymsg, "led"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 12; + uint8_t * dest = ros_message->led; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // fan + PyObject * field = PyObject_GetAttrString(_pymsg, "fan"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 2; + uint8_t * dest = ros_message->fan; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // gpio + PyObject * field = PyObject_GetAttrString(_pymsg, "gpio"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->gpio = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "reserve"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->reserve = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // crc + PyObject * field = PyObject_GetAttrString(_pymsg, "crc"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->crc = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__low_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of LowCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._low_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LowCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__LowCmd * ros_message = (unitree_go__msg__LowCmd *)raw_ros_message; + { // head + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "head"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->head[0]); + memcpy(dst, src, 2 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // level_flag + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->level_flag); + { + int rc = PyObject_SetAttrString(_pymessage, "level_flag", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // frame_reserve + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->frame_reserve); + { + int rc = PyObject_SetAttrString(_pymessage, "frame_reserve", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // sn + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "sn"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + assert(sizeof(npy_uint32) == sizeof(uint32_t)); + npy_uint32 * dst = (npy_uint32 *)PyArray_GETPTR1(seq_field, 0); + uint32_t * src = &(ros_message->sn[0]); + memcpy(dst, src, 2 * sizeof(uint32_t)); + Py_DECREF(field); + } + { // version + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "version"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + assert(sizeof(npy_uint32) == sizeof(uint32_t)); + npy_uint32 * dst = (npy_uint32 *)PyArray_GETPTR1(seq_field, 0); + uint32_t * src = &(ros_message->version[0]); + memcpy(dst, src, 2 * sizeof(uint32_t)); + Py_DECREF(field); + } + { // bandwidth + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->bandwidth); + { + int rc = PyObject_SetAttrString(_pymessage, "bandwidth", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // motor_cmd + PyObject * field = NULL; + size_t size = 20; + field = PyList_New(size); + if (!field) { + return NULL; + } + unitree_go__msg__MotorCmd * item; + for (size_t i = 0; i < size; ++i) { + item = &(ros_message->motor_cmd[i]); + PyObject * pyitem = unitree_go__msg__motor_cmd__convert_to_py(item); + if (!pyitem) { + Py_DECREF(field); + return NULL; + } + int rc = PyList_SetItem(field, i, pyitem); + (void)rc; + assert(rc == 0); + } + assert(PySequence_Check(field)); + { + int rc = PyObject_SetAttrString(_pymessage, "motor_cmd", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // bms_cmd + PyObject * field = NULL; + field = unitree_go__msg__bms_cmd__convert_to_py(&ros_message->bms_cmd); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "bms_cmd", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // wireless_remote + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "wireless_remote"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->wireless_remote[0]); + memcpy(dst, src, 40 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // led + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "led"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->led[0]); + memcpy(dst, src, 12 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // fan + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "fan"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->fan[0]); + memcpy(dst, src, 2 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // gpio + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->gpio); + { + int rc = PyObject_SetAttrString(_pymessage, "gpio", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // reserve + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->reserve); + { + int rc = PyObject_SetAttrString(_pymessage, "reserve", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // crc + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->crc); + { + int rc = PyObject_SetAttrString(_pymessage, "crc", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state.py new file mode 100644 index 0000000..6c02bc4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state.py @@ -0,0 +1,734 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/LowState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'head' +# Member 'sn' +# Member 'version' +# Member 'foot_force' +# Member 'foot_force_est' +# Member 'wireless_remote' +# Member 'fan_frequency' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_LowState(type): + """Metaclass of message 'LowState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.LowState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__low_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__low_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__low_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__low_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__low_state + + from unitree_go.msg import BmsState + if BmsState.__class__._TYPE_SUPPORT is None: + BmsState.__class__.__import_type_support__() + + from unitree_go.msg import IMUState + if IMUState.__class__._TYPE_SUPPORT is None: + IMUState.__class__.__import_type_support__() + + from unitree_go.msg import MotorState + if MotorState.__class__._TYPE_SUPPORT is None: + MotorState.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class LowState(metaclass=Metaclass_LowState): + """Message class 'LowState'.""" + + __slots__ = [ + '_head', + '_level_flag', + '_frame_reserve', + '_sn', + '_version', + '_bandwidth', + '_imu_state', + '_motor_state', + '_bms_state', + '_foot_force', + '_foot_force_est', + '_tick', + '_wireless_remote', + '_bit_flag', + '_adc_reel', + '_temperature_ntc1', + '_temperature_ntc2', + '_power_v', + '_power_a', + '_fan_frequency', + '_reserve', + '_crc', + ] + + _fields_and_field_types = { + 'head': 'uint8[2]', + 'level_flag': 'uint8', + 'frame_reserve': 'uint8', + 'sn': 'uint32[2]', + 'version': 'uint32[2]', + 'bandwidth': 'uint16', + 'imu_state': 'unitree_go/IMUState', + 'motor_state': 'unitree_go/MotorState[20]', + 'bms_state': 'unitree_go/BmsState', + 'foot_force': 'int16[4]', + 'foot_force_est': 'int16[4]', + 'tick': 'uint32', + 'wireless_remote': 'uint8[40]', + 'bit_flag': 'uint8', + 'adc_reel': 'float', + 'temperature_ntc1': 'int8', + 'temperature_ntc2': 'int8', + 'power_v': 'float', + 'power_a': 'float', + 'fan_frequency': 'uint16[4]', + 'reserve': 'uint32', + 'crc': 'uint32', + } + + SLOT_TYPES = ( + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint32'), 2), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint32'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint16'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'IMUState'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'MotorState'), 20), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'BmsState'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('int16'), 4), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('int16'), 4), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 40), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('int8'), # noqa: E501 + rosidl_parser.definition.BasicType('int8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint16'), 4), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + if 'head' not in kwargs: + self.head = numpy.zeros(2, dtype=numpy.uint8) + else: + self.head = numpy.array(kwargs.get('head'), dtype=numpy.uint8) + assert self.head.shape == (2, ) + self.level_flag = kwargs.get('level_flag', int()) + self.frame_reserve = kwargs.get('frame_reserve', int()) + if 'sn' not in kwargs: + self.sn = numpy.zeros(2, dtype=numpy.uint32) + else: + self.sn = numpy.array(kwargs.get('sn'), dtype=numpy.uint32) + assert self.sn.shape == (2, ) + if 'version' not in kwargs: + self.version = numpy.zeros(2, dtype=numpy.uint32) + else: + self.version = numpy.array(kwargs.get('version'), dtype=numpy.uint32) + assert self.version.shape == (2, ) + self.bandwidth = kwargs.get('bandwidth', int()) + from unitree_go.msg import IMUState + self.imu_state = kwargs.get('imu_state', IMUState()) + from unitree_go.msg import MotorState + self.motor_state = kwargs.get( + 'motor_state', + [MotorState() for x in range(20)] + ) + from unitree_go.msg import BmsState + self.bms_state = kwargs.get('bms_state', BmsState()) + if 'foot_force' not in kwargs: + self.foot_force = numpy.zeros(4, dtype=numpy.int16) + else: + self.foot_force = numpy.array(kwargs.get('foot_force'), dtype=numpy.int16) + assert self.foot_force.shape == (4, ) + if 'foot_force_est' not in kwargs: + self.foot_force_est = numpy.zeros(4, dtype=numpy.int16) + else: + self.foot_force_est = numpy.array(kwargs.get('foot_force_est'), dtype=numpy.int16) + assert self.foot_force_est.shape == (4, ) + self.tick = kwargs.get('tick', int()) + if 'wireless_remote' not in kwargs: + self.wireless_remote = numpy.zeros(40, dtype=numpy.uint8) + else: + self.wireless_remote = numpy.array(kwargs.get('wireless_remote'), dtype=numpy.uint8) + assert self.wireless_remote.shape == (40, ) + self.bit_flag = kwargs.get('bit_flag', int()) + self.adc_reel = kwargs.get('adc_reel', float()) + self.temperature_ntc1 = kwargs.get('temperature_ntc1', int()) + self.temperature_ntc2 = kwargs.get('temperature_ntc2', int()) + self.power_v = kwargs.get('power_v', float()) + self.power_a = kwargs.get('power_a', float()) + if 'fan_frequency' not in kwargs: + self.fan_frequency = numpy.zeros(4, dtype=numpy.uint16) + else: + self.fan_frequency = numpy.array(kwargs.get('fan_frequency'), dtype=numpy.uint16) + assert self.fan_frequency.shape == (4, ) + self.reserve = kwargs.get('reserve', int()) + self.crc = kwargs.get('crc', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if all(self.head != other.head): + return False + if self.level_flag != other.level_flag: + return False + if self.frame_reserve != other.frame_reserve: + return False + if all(self.sn != other.sn): + return False + if all(self.version != other.version): + return False + if self.bandwidth != other.bandwidth: + return False + if self.imu_state != other.imu_state: + return False + if self.motor_state != other.motor_state: + return False + if self.bms_state != other.bms_state: + return False + if all(self.foot_force != other.foot_force): + return False + if all(self.foot_force_est != other.foot_force_est): + return False + if self.tick != other.tick: + return False + if all(self.wireless_remote != other.wireless_remote): + return False + if self.bit_flag != other.bit_flag: + return False + if self.adc_reel != other.adc_reel: + return False + if self.temperature_ntc1 != other.temperature_ntc1: + return False + if self.temperature_ntc2 != other.temperature_ntc2: + return False + if self.power_v != other.power_v: + return False + if self.power_a != other.power_a: + return False + if all(self.fan_frequency != other.fan_frequency): + return False + if self.reserve != other.reserve: + return False + if self.crc != other.crc: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def head(self): + """Message field 'head'.""" + return self._head + + @head.setter + def head(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'head' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 2, \ + "The 'head' numpy.ndarray() must have a size of 2" + self._head = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'head' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 255]" + self._head = numpy.array(value, dtype=numpy.uint8) + + @property + def level_flag(self): + """Message field 'level_flag'.""" + return self._level_flag + + @level_flag.setter + def level_flag(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'level_flag' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'level_flag' field must be an unsigned integer in [0, 255]" + self._level_flag = value + + @property + def frame_reserve(self): + """Message field 'frame_reserve'.""" + return self._frame_reserve + + @frame_reserve.setter + def frame_reserve(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'frame_reserve' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'frame_reserve' field must be an unsigned integer in [0, 255]" + self._frame_reserve = value + + @property + def sn(self): + """Message field 'sn'.""" + return self._sn + + @sn.setter + def sn(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint32, \ + "The 'sn' numpy.ndarray() must have the dtype of 'numpy.uint32'" + assert value.size == 2, \ + "The 'sn' numpy.ndarray() must have a size of 2" + self._sn = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 4294967296 for val in value)), \ + "The 'sn' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 4294967295]" + self._sn = numpy.array(value, dtype=numpy.uint32) + + @property + def version(self): + """Message field 'version'.""" + return self._version + + @version.setter + def version(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint32, \ + "The 'version' numpy.ndarray() must have the dtype of 'numpy.uint32'" + assert value.size == 2, \ + "The 'version' numpy.ndarray() must have a size of 2" + self._version = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 4294967296 for val in value)), \ + "The 'version' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 4294967295]" + self._version = numpy.array(value, dtype=numpy.uint32) + + @property + def bandwidth(self): + """Message field 'bandwidth'.""" + return self._bandwidth + + @bandwidth.setter + def bandwidth(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'bandwidth' field must be of type 'int'" + assert value >= 0 and value < 65536, \ + "The 'bandwidth' field must be an unsigned integer in [0, 65535]" + self._bandwidth = value + + @property + def imu_state(self): + """Message field 'imu_state'.""" + return self._imu_state + + @imu_state.setter + def imu_state(self, value): + if __debug__: + from unitree_go.msg import IMUState + assert \ + isinstance(value, IMUState), \ + "The 'imu_state' field must be a sub message of type 'IMUState'" + self._imu_state = value + + @property + def motor_state(self): + """Message field 'motor_state'.""" + return self._motor_state + + @motor_state.setter + def motor_state(self, value): + if __debug__: + from unitree_go.msg import MotorState + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 20 and + all(isinstance(v, MotorState) for v in value) and + True), \ + "The 'motor_state' field must be a set or sequence with length 20 and each value of type 'MotorState'" + self._motor_state = value + + @property + def bms_state(self): + """Message field 'bms_state'.""" + return self._bms_state + + @bms_state.setter + def bms_state(self, value): + if __debug__: + from unitree_go.msg import BmsState + assert \ + isinstance(value, BmsState), \ + "The 'bms_state' field must be a sub message of type 'BmsState'" + self._bms_state = value + + @property + def foot_force(self): + """Message field 'foot_force'.""" + return self._foot_force + + @foot_force.setter + def foot_force(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.int16, \ + "The 'foot_force' numpy.ndarray() must have the dtype of 'numpy.int16'" + assert value.size == 4, \ + "The 'foot_force' numpy.ndarray() must have a size of 4" + self._foot_force = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 4 and + all(isinstance(v, int) for v in value) and + all(val >= -32768 and val < 32768 for val in value)), \ + "The 'foot_force' field must be a set or sequence with length 4 and each value of type 'int' and each integer in [-32768, 32767]" + self._foot_force = numpy.array(value, dtype=numpy.int16) + + @property + def foot_force_est(self): + """Message field 'foot_force_est'.""" + return self._foot_force_est + + @foot_force_est.setter + def foot_force_est(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.int16, \ + "The 'foot_force_est' numpy.ndarray() must have the dtype of 'numpy.int16'" + assert value.size == 4, \ + "The 'foot_force_est' numpy.ndarray() must have a size of 4" + self._foot_force_est = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 4 and + all(isinstance(v, int) for v in value) and + all(val >= -32768 and val < 32768 for val in value)), \ + "The 'foot_force_est' field must be a set or sequence with length 4 and each value of type 'int' and each integer in [-32768, 32767]" + self._foot_force_est = numpy.array(value, dtype=numpy.int16) + + @property + def tick(self): + """Message field 'tick'.""" + return self._tick + + @tick.setter + def tick(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'tick' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'tick' field must be an unsigned integer in [0, 4294967295]" + self._tick = value + + @property + def wireless_remote(self): + """Message field 'wireless_remote'.""" + return self._wireless_remote + + @wireless_remote.setter + def wireless_remote(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'wireless_remote' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 40, \ + "The 'wireless_remote' numpy.ndarray() must have a size of 40" + self._wireless_remote = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 40 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'wireless_remote' field must be a set or sequence with length 40 and each value of type 'int' and each unsigned integer in [0, 255]" + self._wireless_remote = numpy.array(value, dtype=numpy.uint8) + + @property + def bit_flag(self): + """Message field 'bit_flag'.""" + return self._bit_flag + + @bit_flag.setter + def bit_flag(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'bit_flag' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'bit_flag' field must be an unsigned integer in [0, 255]" + self._bit_flag = value + + @property + def adc_reel(self): + """Message field 'adc_reel'.""" + return self._adc_reel + + @adc_reel.setter + def adc_reel(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'adc_reel' field must be of type 'float'" + self._adc_reel = value + + @property + def temperature_ntc1(self): + """Message field 'temperature_ntc1'.""" + return self._temperature_ntc1 + + @temperature_ntc1.setter + def temperature_ntc1(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'temperature_ntc1' field must be of type 'int'" + assert value >= -128 and value < 128, \ + "The 'temperature_ntc1' field must be an integer in [-128, 127]" + self._temperature_ntc1 = value + + @property + def temperature_ntc2(self): + """Message field 'temperature_ntc2'.""" + return self._temperature_ntc2 + + @temperature_ntc2.setter + def temperature_ntc2(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'temperature_ntc2' field must be of type 'int'" + assert value >= -128 and value < 128, \ + "The 'temperature_ntc2' field must be an integer in [-128, 127]" + self._temperature_ntc2 = value + + @property + def power_v(self): + """Message field 'power_v'.""" + return self._power_v + + @power_v.setter + def power_v(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'power_v' field must be of type 'float'" + self._power_v = value + + @property + def power_a(self): + """Message field 'power_a'.""" + return self._power_a + + @power_a.setter + def power_a(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'power_a' field must be of type 'float'" + self._power_a = value + + @property + def fan_frequency(self): + """Message field 'fan_frequency'.""" + return self._fan_frequency + + @fan_frequency.setter + def fan_frequency(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint16, \ + "The 'fan_frequency' numpy.ndarray() must have the dtype of 'numpy.uint16'" + assert value.size == 4, \ + "The 'fan_frequency' numpy.ndarray() must have a size of 4" + self._fan_frequency = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 4 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 65536 for val in value)), \ + "The 'fan_frequency' field must be a set or sequence with length 4 and each value of type 'int' and each unsigned integer in [0, 65535]" + self._fan_frequency = numpy.array(value, dtype=numpy.uint16) + + @property + def reserve(self): + """Message field 'reserve'.""" + return self._reserve + + @reserve.setter + def reserve(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'reserve' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'reserve' field must be an unsigned integer in [0, 4294967295]" + self._reserve = value + + @property + def crc(self): + """Message field 'crc'.""" + return self._crc + + @crc.setter + def crc(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'crc' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'crc' field must be an unsigned integer in [0, 4294967295]" + self._crc = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state_s.c new file mode 100644 index 0000000..ad3c234 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_low_state_s.c @@ -0,0 +1,724 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/low_state__struct.h" +#include "unitree_go/msg/detail/low_state__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +// Nested array functions includes +#include "unitree_go/msg/detail/motor_state__functions.h" +// end nested array functions include +bool unitree_go__msg__imu_state__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__imu_state__convert_to_py(void * raw_ros_message); +bool unitree_go__msg__motor_state__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__motor_state__convert_to_py(void * raw_ros_message); +bool unitree_go__msg__bms_state__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__bms_state__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__low_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._low_state.LowState", full_classname_dest, 34) == 0); + } + unitree_go__msg__LowState * ros_message = _ros_message; + { // head + PyObject * field = PyObject_GetAttrString(_pymsg, "head"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 2; + uint8_t * dest = ros_message->head; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // level_flag + PyObject * field = PyObject_GetAttrString(_pymsg, "level_flag"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->level_flag = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // frame_reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "frame_reserve"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->frame_reserve = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // sn + PyObject * field = PyObject_GetAttrString(_pymsg, "sn"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + Py_ssize_t size = 2; + uint32_t * dest = ros_message->sn; + for (Py_ssize_t i = 0; i < size; ++i) { + uint32_t tmp = *(npy_uint32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint32_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // version + PyObject * field = PyObject_GetAttrString(_pymsg, "version"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + Py_ssize_t size = 2; + uint32_t * dest = ros_message->version; + for (Py_ssize_t i = 0; i < size; ++i) { + uint32_t tmp = *(npy_uint32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint32_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // bandwidth + PyObject * field = PyObject_GetAttrString(_pymsg, "bandwidth"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->bandwidth = (uint16_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // imu_state + PyObject * field = PyObject_GetAttrString(_pymsg, "imu_state"); + if (!field) { + return false; + } + if (!unitree_go__msg__imu_state__convert_from_py(field, &ros_message->imu_state)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // motor_state + PyObject * field = PyObject_GetAttrString(_pymsg, "motor_state"); + if (!field) { + return false; + } + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'motor_state'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = 20; + unitree_go__msg__MotorState * dest = ros_message->motor_state; + for (Py_ssize_t i = 0; i < size; ++i) { + if (!unitree_go__msg__motor_state__convert_from_py(PySequence_Fast_GET_ITEM(seq_field, i), &dest[i])) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + } + Py_DECREF(seq_field); + Py_DECREF(field); + } + { // bms_state + PyObject * field = PyObject_GetAttrString(_pymsg, "bms_state"); + if (!field) { + return false; + } + if (!unitree_go__msg__bms_state__convert_from_py(field, &ros_message->bms_state)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // foot_force + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_force"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT16); + Py_ssize_t size = 4; + int16_t * dest = ros_message->foot_force; + for (Py_ssize_t i = 0; i < size; ++i) { + int16_t tmp = *(npy_int16 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(int16_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // foot_force_est + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_force_est"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT16); + Py_ssize_t size = 4; + int16_t * dest = ros_message->foot_force_est; + for (Py_ssize_t i = 0; i < size; ++i) { + int16_t tmp = *(npy_int16 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(int16_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // tick + PyObject * field = PyObject_GetAttrString(_pymsg, "tick"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->tick = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // wireless_remote + PyObject * field = PyObject_GetAttrString(_pymsg, "wireless_remote"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 40; + uint8_t * dest = ros_message->wireless_remote; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // bit_flag + PyObject * field = PyObject_GetAttrString(_pymsg, "bit_flag"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->bit_flag = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // adc_reel + PyObject * field = PyObject_GetAttrString(_pymsg, "adc_reel"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->adc_reel = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // temperature_ntc1 + PyObject * field = PyObject_GetAttrString(_pymsg, "temperature_ntc1"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->temperature_ntc1 = (int8_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // temperature_ntc2 + PyObject * field = PyObject_GetAttrString(_pymsg, "temperature_ntc2"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->temperature_ntc2 = (int8_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // power_v + PyObject * field = PyObject_GetAttrString(_pymsg, "power_v"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->power_v = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // power_a + PyObject * field = PyObject_GetAttrString(_pymsg, "power_a"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->power_a = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // fan_frequency + PyObject * field = PyObject_GetAttrString(_pymsg, "fan_frequency"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT16); + Py_ssize_t size = 4; + uint16_t * dest = ros_message->fan_frequency; + for (Py_ssize_t i = 0; i < size; ++i) { + uint16_t tmp = *(npy_uint16 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint16_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "reserve"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->reserve = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // crc + PyObject * field = PyObject_GetAttrString(_pymsg, "crc"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->crc = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__low_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of LowState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._low_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "LowState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__LowState * ros_message = (unitree_go__msg__LowState *)raw_ros_message; + { // head + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "head"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->head[0]); + memcpy(dst, src, 2 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // level_flag + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->level_flag); + { + int rc = PyObject_SetAttrString(_pymessage, "level_flag", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // frame_reserve + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->frame_reserve); + { + int rc = PyObject_SetAttrString(_pymessage, "frame_reserve", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // sn + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "sn"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + assert(sizeof(npy_uint32) == sizeof(uint32_t)); + npy_uint32 * dst = (npy_uint32 *)PyArray_GETPTR1(seq_field, 0); + uint32_t * src = &(ros_message->sn[0]); + memcpy(dst, src, 2 * sizeof(uint32_t)); + Py_DECREF(field); + } + { // version + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "version"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + assert(sizeof(npy_uint32) == sizeof(uint32_t)); + npy_uint32 * dst = (npy_uint32 *)PyArray_GETPTR1(seq_field, 0); + uint32_t * src = &(ros_message->version[0]); + memcpy(dst, src, 2 * sizeof(uint32_t)); + Py_DECREF(field); + } + { // bandwidth + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->bandwidth); + { + int rc = PyObject_SetAttrString(_pymessage, "bandwidth", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // imu_state + PyObject * field = NULL; + field = unitree_go__msg__imu_state__convert_to_py(&ros_message->imu_state); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "imu_state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // motor_state + PyObject * field = NULL; + size_t size = 20; + field = PyList_New(size); + if (!field) { + return NULL; + } + unitree_go__msg__MotorState * item; + for (size_t i = 0; i < size; ++i) { + item = &(ros_message->motor_state[i]); + PyObject * pyitem = unitree_go__msg__motor_state__convert_to_py(item); + if (!pyitem) { + Py_DECREF(field); + return NULL; + } + int rc = PyList_SetItem(field, i, pyitem); + (void)rc; + assert(rc == 0); + } + assert(PySequence_Check(field)); + { + int rc = PyObject_SetAttrString(_pymessage, "motor_state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // bms_state + PyObject * field = NULL; + field = unitree_go__msg__bms_state__convert_to_py(&ros_message->bms_state); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "bms_state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // foot_force + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "foot_force"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT16); + assert(sizeof(npy_int16) == sizeof(int16_t)); + npy_int16 * dst = (npy_int16 *)PyArray_GETPTR1(seq_field, 0); + int16_t * src = &(ros_message->foot_force[0]); + memcpy(dst, src, 4 * sizeof(int16_t)); + Py_DECREF(field); + } + { // foot_force_est + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "foot_force_est"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT16); + assert(sizeof(npy_int16) == sizeof(int16_t)); + npy_int16 * dst = (npy_int16 *)PyArray_GETPTR1(seq_field, 0); + int16_t * src = &(ros_message->foot_force_est[0]); + memcpy(dst, src, 4 * sizeof(int16_t)); + Py_DECREF(field); + } + { // tick + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->tick); + { + int rc = PyObject_SetAttrString(_pymessage, "tick", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // wireless_remote + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "wireless_remote"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->wireless_remote[0]); + memcpy(dst, src, 40 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // bit_flag + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->bit_flag); + { + int rc = PyObject_SetAttrString(_pymessage, "bit_flag", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // adc_reel + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->adc_reel); + { + int rc = PyObject_SetAttrString(_pymessage, "adc_reel", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // temperature_ntc1 + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->temperature_ntc1); + { + int rc = PyObject_SetAttrString(_pymessage, "temperature_ntc1", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // temperature_ntc2 + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->temperature_ntc2); + { + int rc = PyObject_SetAttrString(_pymessage, "temperature_ntc2", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // power_v + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->power_v); + { + int rc = PyObject_SetAttrString(_pymessage, "power_v", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // power_a + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->power_a); + { + int rc = PyObject_SetAttrString(_pymessage, "power_a", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // fan_frequency + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "fan_frequency"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT16); + assert(sizeof(npy_uint16) == sizeof(uint16_t)); + npy_uint16 * dst = (npy_uint16 *)PyArray_GETPTR1(seq_field, 0); + uint16_t * src = &(ros_message->fan_frequency[0]); + memcpy(dst, src, 4 * sizeof(uint16_t)); + Py_DECREF(field); + } + { // reserve + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->reserve); + { + int rc = PyObject_SetAttrString(_pymessage, "reserve", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // crc + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->crc); + { + int rc = PyObject_SetAttrString(_pymessage, "crc", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd.py new file mode 100644 index 0000000..f580bd6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd.py @@ -0,0 +1,263 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/MotorCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'reserve' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_MotorCmd(type): + """Metaclass of message 'MotorCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.MotorCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__motor_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__motor_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__motor_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__motor_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__motor_cmd + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class MotorCmd(metaclass=Metaclass_MotorCmd): + """Message class 'MotorCmd'.""" + + __slots__ = [ + '_mode', + '_q', + '_dq', + '_tau', + '_kp', + '_kd', + '_reserve', + ] + + _fields_and_field_types = { + 'mode': 'uint8', + 'q': 'float', + 'dq': 'float', + 'tau': 'float', + 'kp': 'float', + 'kd': 'float', + 'reserve': 'uint32[3]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint32'), 3), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.mode = kwargs.get('mode', int()) + self.q = kwargs.get('q', float()) + self.dq = kwargs.get('dq', float()) + self.tau = kwargs.get('tau', float()) + self.kp = kwargs.get('kp', float()) + self.kd = kwargs.get('kd', float()) + if 'reserve' not in kwargs: + self.reserve = numpy.zeros(3, dtype=numpy.uint32) + else: + self.reserve = numpy.array(kwargs.get('reserve'), dtype=numpy.uint32) + assert self.reserve.shape == (3, ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.mode != other.mode: + return False + if self.q != other.q: + return False + if self.dq != other.dq: + return False + if self.tau != other.tau: + return False + if self.kp != other.kp: + return False + if self.kd != other.kd: + return False + if all(self.reserve != other.reserve): + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def mode(self): + """Message field 'mode'.""" + return self._mode + + @mode.setter + def mode(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'mode' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'mode' field must be an unsigned integer in [0, 255]" + self._mode = value + + @property + def q(self): + """Message field 'q'.""" + return self._q + + @q.setter + def q(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'q' field must be of type 'float'" + self._q = value + + @property + def dq(self): + """Message field 'dq'.""" + return self._dq + + @dq.setter + def dq(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'dq' field must be of type 'float'" + self._dq = value + + @property + def tau(self): + """Message field 'tau'.""" + return self._tau + + @tau.setter + def tau(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'tau' field must be of type 'float'" + self._tau = value + + @property + def kp(self): + """Message field 'kp'.""" + return self._kp + + @kp.setter + def kp(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'kp' field must be of type 'float'" + self._kp = value + + @property + def kd(self): + """Message field 'kd'.""" + return self._kd + + @kd.setter + def kd(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'kd' field must be of type 'float'" + self._kd = value + + @property + def reserve(self): + """Message field 'reserve'.""" + return self._reserve + + @reserve.setter + def reserve(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint32, \ + "The 'reserve' numpy.ndarray() must have the dtype of 'numpy.uint32'" + assert value.size == 3, \ + "The 'reserve' numpy.ndarray() must have a size of 3" + self._reserve = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 4294967296 for val in value)), \ + "The 'reserve' field must be a set or sequence with length 3 and each value of type 'int' and each unsigned integer in [0, 4294967295]" + self._reserve = numpy.array(value, dtype=numpy.uint32) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd_s.c new file mode 100644 index 0000000..64fa078 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_cmd_s.c @@ -0,0 +1,243 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/motor_cmd__struct.h" +#include "unitree_go/msg/detail/motor_cmd__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__motor_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._motor_cmd.MotorCmd", full_classname_dest, 34) == 0); + } + unitree_go__msg__MotorCmd * ros_message = _ros_message; + { // mode + PyObject * field = PyObject_GetAttrString(_pymsg, "mode"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->mode = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // q + PyObject * field = PyObject_GetAttrString(_pymsg, "q"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->q = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // dq + PyObject * field = PyObject_GetAttrString(_pymsg, "dq"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->dq = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // tau + PyObject * field = PyObject_GetAttrString(_pymsg, "tau"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->tau = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // kp + PyObject * field = PyObject_GetAttrString(_pymsg, "kp"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->kp = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // kd + PyObject * field = PyObject_GetAttrString(_pymsg, "kd"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->kd = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "reserve"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + Py_ssize_t size = 3; + uint32_t * dest = ros_message->reserve; + for (Py_ssize_t i = 0; i < size; ++i) { + uint32_t tmp = *(npy_uint32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint32_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__motor_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of MotorCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._motor_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "MotorCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__MotorCmd * ros_message = (unitree_go__msg__MotorCmd *)raw_ros_message; + { // mode + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->mode); + { + int rc = PyObject_SetAttrString(_pymessage, "mode", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // q + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->q); + { + int rc = PyObject_SetAttrString(_pymessage, "q", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // dq + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->dq); + { + int rc = PyObject_SetAttrString(_pymessage, "dq", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // tau + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->tau); + { + int rc = PyObject_SetAttrString(_pymessage, "tau", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // kp + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->kp); + { + int rc = PyObject_SetAttrString(_pymessage, "kp", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // kd + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->kd); + { + int rc = PyObject_SetAttrString(_pymessage, "kd", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // reserve + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "reserve"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + assert(sizeof(npy_uint32) == sizeof(uint32_t)); + npy_uint32 * dst = (npy_uint32 *)PyArray_GETPTR1(seq_field, 0); + uint32_t * src = &(ros_message->reserve[0]); + memcpy(dst, src, 3 * sizeof(uint32_t)); + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state.py new file mode 100644 index 0000000..739e8f0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state.py @@ -0,0 +1,343 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/MotorState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'reserve' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_MotorState(type): + """Metaclass of message 'MotorState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.MotorState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__motor_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__motor_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__motor_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__motor_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__motor_state + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class MotorState(metaclass=Metaclass_MotorState): + """Message class 'MotorState'.""" + + __slots__ = [ + '_mode', + '_q', + '_dq', + '_ddq', + '_tau_est', + '_q_raw', + '_dq_raw', + '_ddq_raw', + '_temperature', + '_lost', + '_reserve', + ] + + _fields_and_field_types = { + 'mode': 'uint8', + 'q': 'float', + 'dq': 'float', + 'ddq': 'float', + 'tau_est': 'float', + 'q_raw': 'float', + 'dq_raw': 'float', + 'ddq_raw': 'float', + 'temperature': 'int8', + 'lost': 'uint32', + 'reserve': 'uint32[2]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('int8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint32'), 2), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.mode = kwargs.get('mode', int()) + self.q = kwargs.get('q', float()) + self.dq = kwargs.get('dq', float()) + self.ddq = kwargs.get('ddq', float()) + self.tau_est = kwargs.get('tau_est', float()) + self.q_raw = kwargs.get('q_raw', float()) + self.dq_raw = kwargs.get('dq_raw', float()) + self.ddq_raw = kwargs.get('ddq_raw', float()) + self.temperature = kwargs.get('temperature', int()) + self.lost = kwargs.get('lost', int()) + if 'reserve' not in kwargs: + self.reserve = numpy.zeros(2, dtype=numpy.uint32) + else: + self.reserve = numpy.array(kwargs.get('reserve'), dtype=numpy.uint32) + assert self.reserve.shape == (2, ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.mode != other.mode: + return False + if self.q != other.q: + return False + if self.dq != other.dq: + return False + if self.ddq != other.ddq: + return False + if self.tau_est != other.tau_est: + return False + if self.q_raw != other.q_raw: + return False + if self.dq_raw != other.dq_raw: + return False + if self.ddq_raw != other.ddq_raw: + return False + if self.temperature != other.temperature: + return False + if self.lost != other.lost: + return False + if all(self.reserve != other.reserve): + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def mode(self): + """Message field 'mode'.""" + return self._mode + + @mode.setter + def mode(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'mode' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'mode' field must be an unsigned integer in [0, 255]" + self._mode = value + + @property + def q(self): + """Message field 'q'.""" + return self._q + + @q.setter + def q(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'q' field must be of type 'float'" + self._q = value + + @property + def dq(self): + """Message field 'dq'.""" + return self._dq + + @dq.setter + def dq(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'dq' field must be of type 'float'" + self._dq = value + + @property + def ddq(self): + """Message field 'ddq'.""" + return self._ddq + + @ddq.setter + def ddq(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'ddq' field must be of type 'float'" + self._ddq = value + + @property + def tau_est(self): + """Message field 'tau_est'.""" + return self._tau_est + + @tau_est.setter + def tau_est(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'tau_est' field must be of type 'float'" + self._tau_est = value + + @property + def q_raw(self): + """Message field 'q_raw'.""" + return self._q_raw + + @q_raw.setter + def q_raw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'q_raw' field must be of type 'float'" + self._q_raw = value + + @property + def dq_raw(self): + """Message field 'dq_raw'.""" + return self._dq_raw + + @dq_raw.setter + def dq_raw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'dq_raw' field must be of type 'float'" + self._dq_raw = value + + @property + def ddq_raw(self): + """Message field 'ddq_raw'.""" + return self._ddq_raw + + @ddq_raw.setter + def ddq_raw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'ddq_raw' field must be of type 'float'" + self._ddq_raw = value + + @property + def temperature(self): + """Message field 'temperature'.""" + return self._temperature + + @temperature.setter + def temperature(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'temperature' field must be of type 'int'" + assert value >= -128 and value < 128, \ + "The 'temperature' field must be an integer in [-128, 127]" + self._temperature = value + + @property + def lost(self): + """Message field 'lost'.""" + return self._lost + + @lost.setter + def lost(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'lost' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'lost' field must be an unsigned integer in [0, 4294967295]" + self._lost = value + + @property + def reserve(self): + """Message field 'reserve'.""" + return self._reserve + + @reserve.setter + def reserve(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint32, \ + "The 'reserve' numpy.ndarray() must have the dtype of 'numpy.uint32'" + assert value.size == 2, \ + "The 'reserve' numpy.ndarray() must have a size of 2" + self._reserve = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 4294967296 for val in value)), \ + "The 'reserve' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 4294967295]" + self._reserve = numpy.array(value, dtype=numpy.uint32) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state_s.c new file mode 100644 index 0000000..56d9526 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_motor_state_s.c @@ -0,0 +1,323 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/motor_state__struct.h" +#include "unitree_go/msg/detail/motor_state__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__motor_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[39]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._motor_state.MotorState", full_classname_dest, 38) == 0); + } + unitree_go__msg__MotorState * ros_message = _ros_message; + { // mode + PyObject * field = PyObject_GetAttrString(_pymsg, "mode"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->mode = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // q + PyObject * field = PyObject_GetAttrString(_pymsg, "q"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->q = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // dq + PyObject * field = PyObject_GetAttrString(_pymsg, "dq"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->dq = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // ddq + PyObject * field = PyObject_GetAttrString(_pymsg, "ddq"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->ddq = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // tau_est + PyObject * field = PyObject_GetAttrString(_pymsg, "tau_est"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->tau_est = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // q_raw + PyObject * field = PyObject_GetAttrString(_pymsg, "q_raw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->q_raw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // dq_raw + PyObject * field = PyObject_GetAttrString(_pymsg, "dq_raw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->dq_raw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // ddq_raw + PyObject * field = PyObject_GetAttrString(_pymsg, "ddq_raw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->ddq_raw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // temperature + PyObject * field = PyObject_GetAttrString(_pymsg, "temperature"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->temperature = (int8_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // lost + PyObject * field = PyObject_GetAttrString(_pymsg, "lost"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->lost = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // reserve + PyObject * field = PyObject_GetAttrString(_pymsg, "reserve"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + Py_ssize_t size = 2; + uint32_t * dest = ros_message->reserve; + for (Py_ssize_t i = 0; i < size; ++i) { + uint32_t tmp = *(npy_uint32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint32_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__motor_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of MotorState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._motor_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "MotorState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__MotorState * ros_message = (unitree_go__msg__MotorState *)raw_ros_message; + { // mode + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->mode); + { + int rc = PyObject_SetAttrString(_pymessage, "mode", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // q + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->q); + { + int rc = PyObject_SetAttrString(_pymessage, "q", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // dq + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->dq); + { + int rc = PyObject_SetAttrString(_pymessage, "dq", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // ddq + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->ddq); + { + int rc = PyObject_SetAttrString(_pymessage, "ddq", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // tau_est + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->tau_est); + { + int rc = PyObject_SetAttrString(_pymessage, "tau_est", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // q_raw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->q_raw); + { + int rc = PyObject_SetAttrString(_pymessage, "q_raw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // dq_raw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->dq_raw); + { + int rc = PyObject_SetAttrString(_pymessage, "dq_raw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // ddq_raw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->ddq_raw); + { + int rc = PyObject_SetAttrString(_pymessage, "ddq_raw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // temperature + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->temperature); + { + int rc = PyObject_SetAttrString(_pymessage, "temperature", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // lost + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->lost); + { + int rc = PyObject_SetAttrString(_pymessage, "lost", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // reserve + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "reserve"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT32); + assert(sizeof(npy_uint32) == sizeof(uint32_t)); + npy_uint32 * dst = (npy_uint32 *)PyArray_GETPTR1(seq_field, 0); + uint32_t * src = &(ros_message->reserve[0]); + memcpy(dst, src, 2 * sizeof(uint32_t)); + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point.py new file mode 100644 index 0000000..1d70220 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point.py @@ -0,0 +1,236 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/PathPoint.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_PathPoint(type): + """Metaclass of message 'PathPoint'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.PathPoint') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__path_point + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__path_point + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__path_point + cls._TYPE_SUPPORT = module.type_support_msg__msg__path_point + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__path_point + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class PathPoint(metaclass=Metaclass_PathPoint): + """Message class 'PathPoint'.""" + + __slots__ = [ + '_t_from_start', + '_x', + '_y', + '_yaw', + '_vx', + '_vy', + '_vyaw', + ] + + _fields_and_field_types = { + 't_from_start': 'float', + 'x': 'float', + 'y': 'float', + 'yaw': 'float', + 'vx': 'float', + 'vy': 'float', + 'vyaw': 'float', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.t_from_start = kwargs.get('t_from_start', float()) + self.x = kwargs.get('x', float()) + self.y = kwargs.get('y', float()) + self.yaw = kwargs.get('yaw', float()) + self.vx = kwargs.get('vx', float()) + self.vy = kwargs.get('vy', float()) + self.vyaw = kwargs.get('vyaw', float()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.t_from_start != other.t_from_start: + return False + if self.x != other.x: + return False + if self.y != other.y: + return False + if self.yaw != other.yaw: + return False + if self.vx != other.vx: + return False + if self.vy != other.vy: + return False + if self.vyaw != other.vyaw: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def t_from_start(self): + """Message field 't_from_start'.""" + return self._t_from_start + + @t_from_start.setter + def t_from_start(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 't_from_start' field must be of type 'float'" + self._t_from_start = value + + @property + def x(self): + """Message field 'x'.""" + return self._x + + @x.setter + def x(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'x' field must be of type 'float'" + self._x = value + + @property + def y(self): + """Message field 'y'.""" + return self._y + + @y.setter + def y(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'y' field must be of type 'float'" + self._y = value + + @property + def yaw(self): + """Message field 'yaw'.""" + return self._yaw + + @yaw.setter + def yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw' field must be of type 'float'" + self._yaw = value + + @property + def vx(self): + """Message field 'vx'.""" + return self._vx + + @vx.setter + def vx(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'vx' field must be of type 'float'" + self._vx = value + + @property + def vy(self): + """Message field 'vy'.""" + return self._vy + + @vy.setter + def vy(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'vy' field must be of type 'float'" + self._vy = value + + @property + def vyaw(self): + """Message field 'vyaw'.""" + return self._vyaw + + @vyaw.setter + def vyaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'vyaw' field must be of type 'float'" + self._vyaw = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point_s.c new file mode 100644 index 0000000..6be16c7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_path_point_s.c @@ -0,0 +1,218 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/path_point__struct.h" +#include "unitree_go/msg/detail/path_point__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__path_point__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[37]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._path_point.PathPoint", full_classname_dest, 36) == 0); + } + unitree_go__msg__PathPoint * ros_message = _ros_message; + { // t_from_start + PyObject * field = PyObject_GetAttrString(_pymsg, "t_from_start"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->t_from_start = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // x + PyObject * field = PyObject_GetAttrString(_pymsg, "x"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->x = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // y + PyObject * field = PyObject_GetAttrString(_pymsg, "y"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->y = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // vx + PyObject * field = PyObject_GetAttrString(_pymsg, "vx"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->vx = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // vy + PyObject * field = PyObject_GetAttrString(_pymsg, "vy"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->vy = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // vyaw + PyObject * field = PyObject_GetAttrString(_pymsg, "vyaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->vyaw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__path_point__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of PathPoint */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._path_point"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "PathPoint"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__PathPoint * ros_message = (unitree_go__msg__PathPoint *)raw_ros_message; + { // t_from_start + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->t_from_start); + { + int rc = PyObject_SetAttrString(_pymessage, "t_from_start", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // x + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->x); + { + int rc = PyObject_SetAttrString(_pymessage, "x", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // y + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->y); + { + int rc = PyObject_SetAttrString(_pymessage, "y", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vx + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->vx); + { + int rc = PyObject_SetAttrString(_pymessage, "vx", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vy + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->vy); + { + int rc = PyObject_SetAttrString(_pymessage, "vy", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // vyaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->vyaw); + { + int rc = PyObject_SetAttrString(_pymessage, "vyaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req.py new file mode 100644 index 0000000..0827644 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req.py @@ -0,0 +1,141 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/Req.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Req(type): + """Metaclass of message 'Req'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.Req') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__req + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__req + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__req + cls._TYPE_SUPPORT = module.type_support_msg__msg__req + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__req + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Req(metaclass=Metaclass_Req): + """Message class 'Req'.""" + + __slots__ = [ + '_uuid', + '_body', + ] + + _fields_and_field_types = { + 'uuid': 'string', + 'body': 'string', + } + + SLOT_TYPES = ( + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.uuid = kwargs.get('uuid', str()) + self.body = kwargs.get('body', str()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.uuid != other.uuid: + return False + if self.body != other.body: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def uuid(self): + """Message field 'uuid'.""" + return self._uuid + + @uuid.setter + def uuid(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'uuid' field must be of type 'str'" + self._uuid = value + + @property + def body(self): + """Message field 'body'.""" + return self._body + + @body.setter + def body(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'body' field must be of type 'str'" + self._body = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req_s.c new file mode 100644 index 0000000..856782f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_req_s.c @@ -0,0 +1,145 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/req__struct.h" +#include "unitree_go/msg/detail/req__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__req__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[24]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._req.Req", full_classname_dest, 23) == 0); + } + unitree_go__msg__Req * ros_message = _ros_message; + { // uuid + PyObject * field = PyObject_GetAttrString(_pymsg, "uuid"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->uuid, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // body + PyObject * field = PyObject_GetAttrString(_pymsg, "body"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->body, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__req__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Req */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._req"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Req"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__Req * ros_message = (unitree_go__msg__Req *)raw_ros_message; + { // uuid + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->uuid.data, + strlen(ros_message->uuid.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "uuid", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // body + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->body.data, + strlen(ros_message->body.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "body", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res.py new file mode 100644 index 0000000..da1126d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res.py @@ -0,0 +1,178 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/Res.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'data' +import array # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_Res(type): + """Metaclass of message 'Res'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.Res') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__res + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__res + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__res + cls._TYPE_SUPPORT = module.type_support_msg__msg__res + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__res + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class Res(metaclass=Metaclass_Res): + """Message class 'Res'.""" + + __slots__ = [ + '_uuid', + '_data', + '_body', + ] + + _fields_and_field_types = { + 'uuid': 'string', + 'data': 'sequence', + 'body': 'string', + } + + SLOT_TYPES = ( + rosidl_parser.definition.UnboundedString(), # noqa: E501 + rosidl_parser.definition.UnboundedSequence(rosidl_parser.definition.BasicType('uint8')), # noqa: E501 + rosidl_parser.definition.UnboundedString(), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.uuid = kwargs.get('uuid', str()) + self.data = array.array('B', kwargs.get('data', [])) + self.body = kwargs.get('body', str()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.uuid != other.uuid: + return False + if self.data != other.data: + return False + if self.body != other.body: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def uuid(self): + """Message field 'uuid'.""" + return self._uuid + + @uuid.setter + def uuid(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'uuid' field must be of type 'str'" + self._uuid = value + + @property + def data(self): + """Message field 'data'.""" + return self._data + + @data.setter + def data(self, value): + if isinstance(value, array.array): + assert value.typecode == 'B', \ + "The 'data' array.array() must have the type code of 'B'" + self._data = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'data' field must be a set or sequence and each value of type 'int' and each unsigned integer in [0, 255]" + self._data = array.array('B', value) + + @property + def body(self): + """Message field 'body'.""" + return self._body + + @body.setter + def body(self, value): + if __debug__: + assert \ + isinstance(value, str), \ + "The 'body' field must be of type 'str'" + self._body = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res_s.c new file mode 100644 index 0000000..4e40f1d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_res_s.c @@ -0,0 +1,268 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/res__struct.h" +#include "unitree_go/msg/detail/res__functions.h" + +#include "rosidl_runtime_c/string.h" +#include "rosidl_runtime_c/string_functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__res__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[24]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._res.Res", full_classname_dest, 23) == 0); + } + unitree_go__msg__Res * ros_message = _ros_message; + { // uuid + PyObject * field = PyObject_GetAttrString(_pymsg, "uuid"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->uuid, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + { // data + PyObject * field = PyObject_GetAttrString(_pymsg, "data"); + if (!field) { + return false; + } + if (PyObject_CheckBuffer(field)) { + // Optimization for converting arrays of primitives + Py_buffer view; + int rc = PyObject_GetBuffer(field, &view, PyBUF_SIMPLE); + if (rc < 0) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = view.len / sizeof(uint8_t); + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->data), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->data.data; + rc = PyBuffer_ToContiguous(dest, &view, view.len, 'C'); + if (rc < 0) { + PyBuffer_Release(&view); + Py_DECREF(field); + return false; + } + PyBuffer_Release(&view); + } else { + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'data'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = PySequence_Size(field); + if (-1 == size) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + if (!rosidl_runtime_c__uint8__Sequence__init(&(ros_message->data), size)) { + PyErr_SetString(PyExc_RuntimeError, "unable to create uint8__Sequence ros_message"); + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + uint8_t * dest = ros_message->data.data; + for (Py_ssize_t i = 0; i < size; ++i) { + PyObject * item = PySequence_Fast_GET_ITEM(seq_field, i); + if (!item) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + assert(PyLong_Check(item)); + uint8_t tmp = (uint8_t)PyLong_AsUnsignedLong(item); + + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // body + PyObject * field = PyObject_GetAttrString(_pymsg, "body"); + if (!field) { + return false; + } + assert(PyUnicode_Check(field)); + PyObject * encoded_field = PyUnicode_AsUTF8String(field); + if (!encoded_field) { + Py_DECREF(field); + return false; + } + rosidl_runtime_c__String__assign(&ros_message->body, PyBytes_AS_STRING(encoded_field)); + Py_DECREF(encoded_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__res__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of Res */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._res"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "Res"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__Res * ros_message = (unitree_go__msg__Res *)raw_ros_message; + { // uuid + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->uuid.data, + strlen(ros_message->uuid.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "uuid", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // data + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "data"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "array.array") == 0); + // ensure that itemsize matches the sizeof of the ROS message field + PyObject * itemsize_attr = PyObject_GetAttrString(field, "itemsize"); + assert(itemsize_attr != NULL); + size_t itemsize = PyLong_AsSize_t(itemsize_attr); + Py_DECREF(itemsize_attr); + if (itemsize != sizeof(uint8_t)) { + PyErr_SetString(PyExc_RuntimeError, "itemsize doesn't match expectation"); + Py_DECREF(field); + return NULL; + } + // clear the array, poor approach to remove potential default values + Py_ssize_t length = PyObject_Length(field); + if (-1 == length) { + Py_DECREF(field); + return NULL; + } + if (length > 0) { + PyObject * pop = PyObject_GetAttrString(field, "pop"); + assert(pop != NULL); + for (Py_ssize_t i = 0; i < length; ++i) { + PyObject * ret = PyObject_CallFunctionObjArgs(pop, NULL); + if (!ret) { + Py_DECREF(pop); + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(pop); + } + if (ros_message->data.size > 0) { + // populating the array.array using the frombytes method + PyObject * frombytes = PyObject_GetAttrString(field, "frombytes"); + assert(frombytes != NULL); + uint8_t * src = &(ros_message->data.data[0]); + PyObject * data = PyBytes_FromStringAndSize((const char *)src, ros_message->data.size * sizeof(uint8_t)); + assert(data != NULL); + PyObject * ret = PyObject_CallFunctionObjArgs(frombytes, data, NULL); + Py_DECREF(data); + Py_DECREF(frombytes); + if (!ret) { + Py_DECREF(field); + return NULL; + } + Py_DECREF(ret); + } + Py_DECREF(field); + } + { // body + PyObject * field = NULL; + field = PyUnicode_DecodeUTF8( + ros_message->body.data, + strlen(ros_message->body.data), + "replace"); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "body", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd.py new file mode 100644 index 0000000..7bcaf06 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd.py @@ -0,0 +1,415 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/SportModeCmd.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'position' +# Member 'euler' +# Member 'velocity' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_SportModeCmd(type): + """Metaclass of message 'SportModeCmd'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.SportModeCmd') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__sport_mode_cmd + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__sport_mode_cmd + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__sport_mode_cmd + cls._TYPE_SUPPORT = module.type_support_msg__msg__sport_mode_cmd + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__sport_mode_cmd + + from unitree_go.msg import BmsCmd + if BmsCmd.__class__._TYPE_SUPPORT is None: + BmsCmd.__class__.__import_type_support__() + + from unitree_go.msg import PathPoint + if PathPoint.__class__._TYPE_SUPPORT is None: + PathPoint.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class SportModeCmd(metaclass=Metaclass_SportModeCmd): + """Message class 'SportModeCmd'.""" + + __slots__ = [ + '_mode', + '_gait_type', + '_speed_level', + '_foot_raise_height', + '_body_height', + '_position', + '_euler', + '_velocity', + '_yaw_speed', + '_bms_cmd', + '_path_point', + ] + + _fields_and_field_types = { + 'mode': 'uint8', + 'gait_type': 'uint8', + 'speed_level': 'uint8', + 'foot_raise_height': 'float', + 'body_height': 'float', + 'position': 'float[2]', + 'euler': 'float[3]', + 'velocity': 'float[2]', + 'yaw_speed': 'float', + 'bms_cmd': 'unitree_go/BmsCmd', + 'path_point': 'unitree_go/PathPoint[30]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 2), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'BmsCmd'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'PathPoint'), 30), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.mode = kwargs.get('mode', int()) + self.gait_type = kwargs.get('gait_type', int()) + self.speed_level = kwargs.get('speed_level', int()) + self.foot_raise_height = kwargs.get('foot_raise_height', float()) + self.body_height = kwargs.get('body_height', float()) + if 'position' not in kwargs: + self.position = numpy.zeros(2, dtype=numpy.float32) + else: + self.position = numpy.array(kwargs.get('position'), dtype=numpy.float32) + assert self.position.shape == (2, ) + if 'euler' not in kwargs: + self.euler = numpy.zeros(3, dtype=numpy.float32) + else: + self.euler = numpy.array(kwargs.get('euler'), dtype=numpy.float32) + assert self.euler.shape == (3, ) + if 'velocity' not in kwargs: + self.velocity = numpy.zeros(2, dtype=numpy.float32) + else: + self.velocity = numpy.array(kwargs.get('velocity'), dtype=numpy.float32) + assert self.velocity.shape == (2, ) + self.yaw_speed = kwargs.get('yaw_speed', float()) + from unitree_go.msg import BmsCmd + self.bms_cmd = kwargs.get('bms_cmd', BmsCmd()) + from unitree_go.msg import PathPoint + self.path_point = kwargs.get( + 'path_point', + [PathPoint() for x in range(30)] + ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.mode != other.mode: + return False + if self.gait_type != other.gait_type: + return False + if self.speed_level != other.speed_level: + return False + if self.foot_raise_height != other.foot_raise_height: + return False + if self.body_height != other.body_height: + return False + if all(self.position != other.position): + return False + if all(self.euler != other.euler): + return False + if all(self.velocity != other.velocity): + return False + if self.yaw_speed != other.yaw_speed: + return False + if self.bms_cmd != other.bms_cmd: + return False + if self.path_point != other.path_point: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def mode(self): + """Message field 'mode'.""" + return self._mode + + @mode.setter + def mode(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'mode' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'mode' field must be an unsigned integer in [0, 255]" + self._mode = value + + @property + def gait_type(self): + """Message field 'gait_type'.""" + return self._gait_type + + @gait_type.setter + def gait_type(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'gait_type' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'gait_type' field must be an unsigned integer in [0, 255]" + self._gait_type = value + + @property + def speed_level(self): + """Message field 'speed_level'.""" + return self._speed_level + + @speed_level.setter + def speed_level(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'speed_level' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'speed_level' field must be an unsigned integer in [0, 255]" + self._speed_level = value + + @property + def foot_raise_height(self): + """Message field 'foot_raise_height'.""" + return self._foot_raise_height + + @foot_raise_height.setter + def foot_raise_height(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'foot_raise_height' field must be of type 'float'" + self._foot_raise_height = value + + @property + def body_height(self): + """Message field 'body_height'.""" + return self._body_height + + @body_height.setter + def body_height(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'body_height' field must be of type 'float'" + self._body_height = value + + @property + def position(self): + """Message field 'position'.""" + return self._position + + @position.setter + def position(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'position' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 2, \ + "The 'position' numpy.ndarray() must have a size of 2" + self._position = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'position' field must be a set or sequence with length 2 and each value of type 'float'" + self._position = numpy.array(value, dtype=numpy.float32) + + @property + def euler(self): + """Message field 'euler'.""" + return self._euler + + @euler.setter + def euler(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'euler' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'euler' numpy.ndarray() must have a size of 3" + self._euler = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'euler' field must be a set or sequence with length 3 and each value of type 'float'" + self._euler = numpy.array(value, dtype=numpy.float32) + + @property + def velocity(self): + """Message field 'velocity'.""" + return self._velocity + + @velocity.setter + def velocity(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'velocity' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 2, \ + "The 'velocity' numpy.ndarray() must have a size of 2" + self._velocity = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'velocity' field must be a set or sequence with length 2 and each value of type 'float'" + self._velocity = numpy.array(value, dtype=numpy.float32) + + @property + def yaw_speed(self): + """Message field 'yaw_speed'.""" + return self._yaw_speed + + @yaw_speed.setter + def yaw_speed(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw_speed' field must be of type 'float'" + self._yaw_speed = value + + @property + def bms_cmd(self): + """Message field 'bms_cmd'.""" + return self._bms_cmd + + @bms_cmd.setter + def bms_cmd(self, value): + if __debug__: + from unitree_go.msg import BmsCmd + assert \ + isinstance(value, BmsCmd), \ + "The 'bms_cmd' field must be a sub message of type 'BmsCmd'" + self._bms_cmd = value + + @property + def path_point(self): + """Message field 'path_point'.""" + return self._path_point + + @path_point.setter + def path_point(self, value): + if __debug__: + from unitree_go.msg import PathPoint + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 30 and + all(isinstance(v, PathPoint) for v in value) and + True), \ + "The 'path_point' field must be a set or sequence with length 30 and each value of type 'PathPoint'" + self._path_point = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd_s.c new file mode 100644 index 0000000..8163331 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_cmd_s.c @@ -0,0 +1,409 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/sport_mode_cmd__struct.h" +#include "unitree_go/msg/detail/sport_mode_cmd__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +// Nested array functions includes +#include "unitree_go/msg/detail/path_point__functions.h" +// end nested array functions include +bool unitree_go__msg__bms_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__bms_cmd__convert_to_py(void * raw_ros_message); +bool unitree_go__msg__path_point__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__path_point__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__sport_mode_cmd__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[44]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._sport_mode_cmd.SportModeCmd", full_classname_dest, 43) == 0); + } + unitree_go__msg__SportModeCmd * ros_message = _ros_message; + { // mode + PyObject * field = PyObject_GetAttrString(_pymsg, "mode"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->mode = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // gait_type + PyObject * field = PyObject_GetAttrString(_pymsg, "gait_type"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->gait_type = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // speed_level + PyObject * field = PyObject_GetAttrString(_pymsg, "speed_level"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->speed_level = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // foot_raise_height + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_raise_height"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->foot_raise_height = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // body_height + PyObject * field = PyObject_GetAttrString(_pymsg, "body_height"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->body_height = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // position + PyObject * field = PyObject_GetAttrString(_pymsg, "position"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 2; + float * dest = ros_message->position; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // euler + PyObject * field = PyObject_GetAttrString(_pymsg, "euler"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->euler; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // velocity + PyObject * field = PyObject_GetAttrString(_pymsg, "velocity"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 2; + float * dest = ros_message->velocity; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // yaw_speed + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw_speed"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw_speed = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // bms_cmd + PyObject * field = PyObject_GetAttrString(_pymsg, "bms_cmd"); + if (!field) { + return false; + } + if (!unitree_go__msg__bms_cmd__convert_from_py(field, &ros_message->bms_cmd)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // path_point + PyObject * field = PyObject_GetAttrString(_pymsg, "path_point"); + if (!field) { + return false; + } + PyObject * seq_field = PySequence_Fast(field, "expected a sequence in 'path_point'"); + if (!seq_field) { + Py_DECREF(field); + return false; + } + Py_ssize_t size = 30; + unitree_go__msg__PathPoint * dest = ros_message->path_point; + for (Py_ssize_t i = 0; i < size; ++i) { + if (!unitree_go__msg__path_point__convert_from_py(PySequence_Fast_GET_ITEM(seq_field, i), &dest[i])) { + Py_DECREF(seq_field); + Py_DECREF(field); + return false; + } + } + Py_DECREF(seq_field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__sport_mode_cmd__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of SportModeCmd */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._sport_mode_cmd"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SportModeCmd"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__SportModeCmd * ros_message = (unitree_go__msg__SportModeCmd *)raw_ros_message; + { // mode + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->mode); + { + int rc = PyObject_SetAttrString(_pymessage, "mode", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // gait_type + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->gait_type); + { + int rc = PyObject_SetAttrString(_pymessage, "gait_type", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // speed_level + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->speed_level); + { + int rc = PyObject_SetAttrString(_pymessage, "speed_level", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // foot_raise_height + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->foot_raise_height); + { + int rc = PyObject_SetAttrString(_pymessage, "foot_raise_height", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // body_height + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->body_height); + { + int rc = PyObject_SetAttrString(_pymessage, "body_height", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // position + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "position"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->position[0]); + memcpy(dst, src, 2 * sizeof(float)); + Py_DECREF(field); + } + { // euler + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "euler"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->euler[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // velocity + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "velocity"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->velocity[0]); + memcpy(dst, src, 2 * sizeof(float)); + Py_DECREF(field); + } + { // yaw_speed + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw_speed); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw_speed", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // bms_cmd + PyObject * field = NULL; + field = unitree_go__msg__bms_cmd__convert_to_py(&ros_message->bms_cmd); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "bms_cmd", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // path_point + PyObject * field = NULL; + size_t size = 30; + field = PyList_New(size); + if (!field) { + return NULL; + } + unitree_go__msg__PathPoint * item; + for (size_t i = 0; i < size; ++i) { + item = &(ros_message->path_point[i]); + PyObject * pyitem = unitree_go__msg__path_point__convert_to_py(item); + if (!pyitem) { + Py_DECREF(field); + return NULL; + } + int rc = PyList_SetItem(field, i, pyitem); + (void)rc; + assert(rc == 0); + } + assert(PySequence_Check(field)); + { + int rc = PyObject_SetAttrString(_pymessage, "path_point", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state.py new file mode 100644 index 0000000..a00aa27 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state.py @@ -0,0 +1,546 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/SportModeState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'position' +# Member 'velocity' +# Member 'range_obstacle' +# Member 'foot_force' +# Member 'foot_position_body' +# Member 'foot_speed_body' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_SportModeState(type): + """Metaclass of message 'SportModeState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.SportModeState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__sport_mode_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__sport_mode_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__sport_mode_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__sport_mode_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__sport_mode_state + + from unitree_go.msg import IMUState + if IMUState.__class__._TYPE_SUPPORT is None: + IMUState.__class__.__import_type_support__() + + from unitree_go.msg import TimeSpec + if TimeSpec.__class__._TYPE_SUPPORT is None: + TimeSpec.__class__.__import_type_support__() + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class SportModeState(metaclass=Metaclass_SportModeState): + """Message class 'SportModeState'.""" + + __slots__ = [ + '_stamp', + '_error_code', + '_imu_state', + '_mode', + '_progress', + '_gait_type', + '_foot_raise_height', + '_position', + '_body_height', + '_velocity', + '_yaw_speed', + '_range_obstacle', + '_foot_force', + '_foot_position_body', + '_foot_speed_body', + ] + + _fields_and_field_types = { + 'stamp': 'unitree_go/TimeSpec', + 'error_code': 'uint32', + 'imu_state': 'unitree_go/IMUState', + 'mode': 'uint8', + 'progress': 'float', + 'gait_type': 'uint8', + 'foot_raise_height': 'float', + 'position': 'float[3]', + 'body_height': 'float', + 'velocity': 'float[3]', + 'yaw_speed': 'float', + 'range_obstacle': 'float[4]', + 'foot_force': 'int16[4]', + 'foot_position_body': 'float[12]', + 'foot_speed_body': 'float[12]', + } + + SLOT_TYPES = ( + rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'TimeSpec'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + rosidl_parser.definition.NamespacedType(['unitree_go', 'msg'], 'IMUState'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 3), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 4), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('int16'), 4), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 12), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 12), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + from unitree_go.msg import TimeSpec + self.stamp = kwargs.get('stamp', TimeSpec()) + self.error_code = kwargs.get('error_code', int()) + from unitree_go.msg import IMUState + self.imu_state = kwargs.get('imu_state', IMUState()) + self.mode = kwargs.get('mode', int()) + self.progress = kwargs.get('progress', float()) + self.gait_type = kwargs.get('gait_type', int()) + self.foot_raise_height = kwargs.get('foot_raise_height', float()) + if 'position' not in kwargs: + self.position = numpy.zeros(3, dtype=numpy.float32) + else: + self.position = numpy.array(kwargs.get('position'), dtype=numpy.float32) + assert self.position.shape == (3, ) + self.body_height = kwargs.get('body_height', float()) + if 'velocity' not in kwargs: + self.velocity = numpy.zeros(3, dtype=numpy.float32) + else: + self.velocity = numpy.array(kwargs.get('velocity'), dtype=numpy.float32) + assert self.velocity.shape == (3, ) + self.yaw_speed = kwargs.get('yaw_speed', float()) + if 'range_obstacle' not in kwargs: + self.range_obstacle = numpy.zeros(4, dtype=numpy.float32) + else: + self.range_obstacle = numpy.array(kwargs.get('range_obstacle'), dtype=numpy.float32) + assert self.range_obstacle.shape == (4, ) + if 'foot_force' not in kwargs: + self.foot_force = numpy.zeros(4, dtype=numpy.int16) + else: + self.foot_force = numpy.array(kwargs.get('foot_force'), dtype=numpy.int16) + assert self.foot_force.shape == (4, ) + if 'foot_position_body' not in kwargs: + self.foot_position_body = numpy.zeros(12, dtype=numpy.float32) + else: + self.foot_position_body = numpy.array(kwargs.get('foot_position_body'), dtype=numpy.float32) + assert self.foot_position_body.shape == (12, ) + if 'foot_speed_body' not in kwargs: + self.foot_speed_body = numpy.zeros(12, dtype=numpy.float32) + else: + self.foot_speed_body = numpy.array(kwargs.get('foot_speed_body'), dtype=numpy.float32) + assert self.foot_speed_body.shape == (12, ) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.stamp != other.stamp: + return False + if self.error_code != other.error_code: + return False + if self.imu_state != other.imu_state: + return False + if self.mode != other.mode: + return False + if self.progress != other.progress: + return False + if self.gait_type != other.gait_type: + return False + if self.foot_raise_height != other.foot_raise_height: + return False + if all(self.position != other.position): + return False + if self.body_height != other.body_height: + return False + if all(self.velocity != other.velocity): + return False + if self.yaw_speed != other.yaw_speed: + return False + if all(self.range_obstacle != other.range_obstacle): + return False + if all(self.foot_force != other.foot_force): + return False + if all(self.foot_position_body != other.foot_position_body): + return False + if all(self.foot_speed_body != other.foot_speed_body): + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def stamp(self): + """Message field 'stamp'.""" + return self._stamp + + @stamp.setter + def stamp(self, value): + if __debug__: + from unitree_go.msg import TimeSpec + assert \ + isinstance(value, TimeSpec), \ + "The 'stamp' field must be a sub message of type 'TimeSpec'" + self._stamp = value + + @property + def error_code(self): + """Message field 'error_code'.""" + return self._error_code + + @error_code.setter + def error_code(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'error_code' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'error_code' field must be an unsigned integer in [0, 4294967295]" + self._error_code = value + + @property + def imu_state(self): + """Message field 'imu_state'.""" + return self._imu_state + + @imu_state.setter + def imu_state(self, value): + if __debug__: + from unitree_go.msg import IMUState + assert \ + isinstance(value, IMUState), \ + "The 'imu_state' field must be a sub message of type 'IMUState'" + self._imu_state = value + + @property + def mode(self): + """Message field 'mode'.""" + return self._mode + + @mode.setter + def mode(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'mode' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'mode' field must be an unsigned integer in [0, 255]" + self._mode = value + + @property + def progress(self): + """Message field 'progress'.""" + return self._progress + + @progress.setter + def progress(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'progress' field must be of type 'float'" + self._progress = value + + @property + def gait_type(self): + """Message field 'gait_type'.""" + return self._gait_type + + @gait_type.setter + def gait_type(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'gait_type' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'gait_type' field must be an unsigned integer in [0, 255]" + self._gait_type = value + + @property + def foot_raise_height(self): + """Message field 'foot_raise_height'.""" + return self._foot_raise_height + + @foot_raise_height.setter + def foot_raise_height(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'foot_raise_height' field must be of type 'float'" + self._foot_raise_height = value + + @property + def position(self): + """Message field 'position'.""" + return self._position + + @position.setter + def position(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'position' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'position' numpy.ndarray() must have a size of 3" + self._position = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'position' field must be a set or sequence with length 3 and each value of type 'float'" + self._position = numpy.array(value, dtype=numpy.float32) + + @property + def body_height(self): + """Message field 'body_height'.""" + return self._body_height + + @body_height.setter + def body_height(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'body_height' field must be of type 'float'" + self._body_height = value + + @property + def velocity(self): + """Message field 'velocity'.""" + return self._velocity + + @velocity.setter + def velocity(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'velocity' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 3, \ + "The 'velocity' numpy.ndarray() must have a size of 3" + self._velocity = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 3 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'velocity' field must be a set or sequence with length 3 and each value of type 'float'" + self._velocity = numpy.array(value, dtype=numpy.float32) + + @property + def yaw_speed(self): + """Message field 'yaw_speed'.""" + return self._yaw_speed + + @yaw_speed.setter + def yaw_speed(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw_speed' field must be of type 'float'" + self._yaw_speed = value + + @property + def range_obstacle(self): + """Message field 'range_obstacle'.""" + return self._range_obstacle + + @range_obstacle.setter + def range_obstacle(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'range_obstacle' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 4, \ + "The 'range_obstacle' numpy.ndarray() must have a size of 4" + self._range_obstacle = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 4 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'range_obstacle' field must be a set or sequence with length 4 and each value of type 'float'" + self._range_obstacle = numpy.array(value, dtype=numpy.float32) + + @property + def foot_force(self): + """Message field 'foot_force'.""" + return self._foot_force + + @foot_force.setter + def foot_force(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.int16, \ + "The 'foot_force' numpy.ndarray() must have the dtype of 'numpy.int16'" + assert value.size == 4, \ + "The 'foot_force' numpy.ndarray() must have a size of 4" + self._foot_force = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 4 and + all(isinstance(v, int) for v in value) and + all(val >= -32768 and val < 32768 for val in value)), \ + "The 'foot_force' field must be a set or sequence with length 4 and each value of type 'int' and each integer in [-32768, 32767]" + self._foot_force = numpy.array(value, dtype=numpy.int16) + + @property + def foot_position_body(self): + """Message field 'foot_position_body'.""" + return self._foot_position_body + + @foot_position_body.setter + def foot_position_body(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'foot_position_body' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 12, \ + "The 'foot_position_body' numpy.ndarray() must have a size of 12" + self._foot_position_body = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 12 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'foot_position_body' field must be a set or sequence with length 12 and each value of type 'float'" + self._foot_position_body = numpy.array(value, dtype=numpy.float32) + + @property + def foot_speed_body(self): + """Message field 'foot_speed_body'.""" + return self._foot_speed_body + + @foot_speed_body.setter + def foot_speed_body(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'foot_speed_body' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 12, \ + "The 'foot_speed_body' numpy.ndarray() must have a size of 12" + self._foot_speed_body = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 12 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'foot_speed_body' field must be a set or sequence with length 12 and each value of type 'float'" + self._foot_speed_body = numpy.array(value, dtype=numpy.float32) diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state_s.c new file mode 100644 index 0000000..b25a50b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_sport_mode_state_s.c @@ -0,0 +1,527 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/sport_mode_state__struct.h" +#include "unitree_go/msg/detail/sport_mode_state__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + +bool unitree_go__msg__time_spec__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__time_spec__convert_to_py(void * raw_ros_message); +bool unitree_go__msg__imu_state__convert_from_py(PyObject * _pymsg, void * _ros_message); +PyObject * unitree_go__msg__imu_state__convert_to_py(void * raw_ros_message); + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__sport_mode_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[48]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._sport_mode_state.SportModeState", full_classname_dest, 47) == 0); + } + unitree_go__msg__SportModeState * ros_message = _ros_message; + { // stamp + PyObject * field = PyObject_GetAttrString(_pymsg, "stamp"); + if (!field) { + return false; + } + if (!unitree_go__msg__time_spec__convert_from_py(field, &ros_message->stamp)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // error_code + PyObject * field = PyObject_GetAttrString(_pymsg, "error_code"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->error_code = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // imu_state + PyObject * field = PyObject_GetAttrString(_pymsg, "imu_state"); + if (!field) { + return false; + } + if (!unitree_go__msg__imu_state__convert_from_py(field, &ros_message->imu_state)) { + Py_DECREF(field); + return false; + } + Py_DECREF(field); + } + { // mode + PyObject * field = PyObject_GetAttrString(_pymsg, "mode"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->mode = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // progress + PyObject * field = PyObject_GetAttrString(_pymsg, "progress"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->progress = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // gait_type + PyObject * field = PyObject_GetAttrString(_pymsg, "gait_type"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->gait_type = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // foot_raise_height + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_raise_height"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->foot_raise_height = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // position + PyObject * field = PyObject_GetAttrString(_pymsg, "position"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->position; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // body_height + PyObject * field = PyObject_GetAttrString(_pymsg, "body_height"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->body_height = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // velocity + PyObject * field = PyObject_GetAttrString(_pymsg, "velocity"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 3; + float * dest = ros_message->velocity; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // yaw_speed + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw_speed"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw_speed = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // range_obstacle + PyObject * field = PyObject_GetAttrString(_pymsg, "range_obstacle"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 4; + float * dest = ros_message->range_obstacle; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // foot_force + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_force"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT16); + Py_ssize_t size = 4; + int16_t * dest = ros_message->foot_force; + for (Py_ssize_t i = 0; i < size; ++i) { + int16_t tmp = *(npy_int16 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(int16_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // foot_position_body + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_position_body"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 12; + float * dest = ros_message->foot_position_body; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // foot_speed_body + PyObject * field = PyObject_GetAttrString(_pymsg, "foot_speed_body"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 12; + float * dest = ros_message->foot_speed_body; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__sport_mode_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of SportModeState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._sport_mode_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "SportModeState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__SportModeState * ros_message = (unitree_go__msg__SportModeState *)raw_ros_message; + { // stamp + PyObject * field = NULL; + field = unitree_go__msg__time_spec__convert_to_py(&ros_message->stamp); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "stamp", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // error_code + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->error_code); + { + int rc = PyObject_SetAttrString(_pymessage, "error_code", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // imu_state + PyObject * field = NULL; + field = unitree_go__msg__imu_state__convert_to_py(&ros_message->imu_state); + if (!field) { + return NULL; + } + { + int rc = PyObject_SetAttrString(_pymessage, "imu_state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // mode + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->mode); + { + int rc = PyObject_SetAttrString(_pymessage, "mode", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // progress + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->progress); + { + int rc = PyObject_SetAttrString(_pymessage, "progress", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // gait_type + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->gait_type); + { + int rc = PyObject_SetAttrString(_pymessage, "gait_type", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // foot_raise_height + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->foot_raise_height); + { + int rc = PyObject_SetAttrString(_pymessage, "foot_raise_height", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // position + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "position"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->position[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // body_height + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->body_height); + { + int rc = PyObject_SetAttrString(_pymessage, "body_height", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // velocity + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "velocity"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->velocity[0]); + memcpy(dst, src, 3 * sizeof(float)); + Py_DECREF(field); + } + { // yaw_speed + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw_speed); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw_speed", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // range_obstacle + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "range_obstacle"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->range_obstacle[0]); + memcpy(dst, src, 4 * sizeof(float)); + Py_DECREF(field); + } + { // foot_force + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "foot_force"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_INT16); + assert(sizeof(npy_int16) == sizeof(int16_t)); + npy_int16 * dst = (npy_int16 *)PyArray_GETPTR1(seq_field, 0); + int16_t * src = &(ros_message->foot_force[0]); + memcpy(dst, src, 4 * sizeof(int16_t)); + Py_DECREF(field); + } + { // foot_position_body + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "foot_position_body"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->foot_position_body[0]); + memcpy(dst, src, 12 * sizeof(float)); + Py_DECREF(field); + } + { // foot_speed_body + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "foot_speed_body"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->foot_speed_body[0]); + memcpy(dst, src, 12 * sizeof(float)); + Py_DECREF(field); + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec.py new file mode 100644 index 0000000..2282825 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec.py @@ -0,0 +1,145 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/TimeSpec.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_TimeSpec(type): + """Metaclass of message 'TimeSpec'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.TimeSpec') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__time_spec + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__time_spec + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__time_spec + cls._TYPE_SUPPORT = module.type_support_msg__msg__time_spec + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__time_spec + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class TimeSpec(metaclass=Metaclass_TimeSpec): + """Message class 'TimeSpec'.""" + + __slots__ = [ + '_sec', + '_nanosec', + ] + + _fields_and_field_types = { + 'sec': 'int32', + 'nanosec': 'uint32', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('int32'), # noqa: E501 + rosidl_parser.definition.BasicType('uint32'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.sec = kwargs.get('sec', int()) + self.nanosec = kwargs.get('nanosec', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.sec != other.sec: + return False + if self.nanosec != other.nanosec: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def sec(self): + """Message field 'sec'.""" + return self._sec + + @sec.setter + def sec(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'sec' field must be of type 'int'" + assert value >= -2147483648 and value < 2147483648, \ + "The 'sec' field must be an integer in [-2147483648, 2147483647]" + self._sec = value + + @property + def nanosec(self): + """Message field 'nanosec'.""" + return self._nanosec + + @nanosec.setter + def nanosec(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'nanosec' field must be of type 'int'" + assert value >= 0 and value < 4294967296, \ + "The 'nanosec' field must be an unsigned integer in [0, 4294967295]" + self._nanosec = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec_s.c new file mode 100644 index 0000000..a9643e1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_time_spec_s.c @@ -0,0 +1,118 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/time_spec__struct.h" +#include "unitree_go/msg/detail/time_spec__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__time_spec__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._time_spec.TimeSpec", full_classname_dest, 34) == 0); + } + unitree_go__msg__TimeSpec * ros_message = _ros_message; + { // sec + PyObject * field = PyObject_GetAttrString(_pymsg, "sec"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->sec = (int32_t)PyLong_AsLong(field); + Py_DECREF(field); + } + { // nanosec + PyObject * field = PyObject_GetAttrString(_pymsg, "nanosec"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->nanosec = PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__time_spec__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of TimeSpec */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._time_spec"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "TimeSpec"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__TimeSpec * ros_message = (unitree_go__msg__TimeSpec *)raw_ros_message; + { // sec + PyObject * field = NULL; + field = PyLong_FromLong(ros_message->sec); + { + int rc = PyObject_SetAttrString(_pymessage, "sec", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // nanosec + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->nanosec); + { + int rc = PyObject_SetAttrString(_pymessage, "nanosec", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state.py new file mode 100644 index 0000000..5ed22b5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state.py @@ -0,0 +1,484 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/UwbState.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +# Member 'version' +# Member 'joystick' +import numpy # noqa: E402, I100 + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_UwbState(type): + """Metaclass of message 'UwbState'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.UwbState') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__uwb_state + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__uwb_state + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__uwb_state + cls._TYPE_SUPPORT = module.type_support_msg__msg__uwb_state + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__uwb_state + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class UwbState(metaclass=Metaclass_UwbState): + """Message class 'UwbState'.""" + + __slots__ = [ + '_version', + '_channel', + '_joy_mode', + '_orientation_est', + '_pitch_est', + '_distance_est', + '_yaw_est', + '_tag_roll', + '_tag_pitch', + '_tag_yaw', + '_base_roll', + '_base_pitch', + '_base_yaw', + '_joystick', + '_error_state', + '_buttons', + '_enabled_from_app', + ] + + _fields_and_field_types = { + 'version': 'uint8[2]', + 'channel': 'uint8', + 'joy_mode': 'uint8', + 'orientation_est': 'float', + 'pitch_est': 'float', + 'distance_est': 'float', + 'yaw_est': 'float', + 'tag_roll': 'float', + 'tag_pitch': 'float', + 'tag_yaw': 'float', + 'base_roll': 'float', + 'base_pitch': 'float', + 'base_yaw': 'float', + 'joystick': 'float[2]', + 'error_state': 'uint8', + 'buttons': 'uint8', + 'enabled_from_app': 'uint8', + } + + SLOT_TYPES = ( + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('uint8'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.Array(rosidl_parser.definition.BasicType('float'), 2), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + if 'version' not in kwargs: + self.version = numpy.zeros(2, dtype=numpy.uint8) + else: + self.version = numpy.array(kwargs.get('version'), dtype=numpy.uint8) + assert self.version.shape == (2, ) + self.channel = kwargs.get('channel', int()) + self.joy_mode = kwargs.get('joy_mode', int()) + self.orientation_est = kwargs.get('orientation_est', float()) + self.pitch_est = kwargs.get('pitch_est', float()) + self.distance_est = kwargs.get('distance_est', float()) + self.yaw_est = kwargs.get('yaw_est', float()) + self.tag_roll = kwargs.get('tag_roll', float()) + self.tag_pitch = kwargs.get('tag_pitch', float()) + self.tag_yaw = kwargs.get('tag_yaw', float()) + self.base_roll = kwargs.get('base_roll', float()) + self.base_pitch = kwargs.get('base_pitch', float()) + self.base_yaw = kwargs.get('base_yaw', float()) + if 'joystick' not in kwargs: + self.joystick = numpy.zeros(2, dtype=numpy.float32) + else: + self.joystick = numpy.array(kwargs.get('joystick'), dtype=numpy.float32) + assert self.joystick.shape == (2, ) + self.error_state = kwargs.get('error_state', int()) + self.buttons = kwargs.get('buttons', int()) + self.enabled_from_app = kwargs.get('enabled_from_app', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if all(self.version != other.version): + return False + if self.channel != other.channel: + return False + if self.joy_mode != other.joy_mode: + return False + if self.orientation_est != other.orientation_est: + return False + if self.pitch_est != other.pitch_est: + return False + if self.distance_est != other.distance_est: + return False + if self.yaw_est != other.yaw_est: + return False + if self.tag_roll != other.tag_roll: + return False + if self.tag_pitch != other.tag_pitch: + return False + if self.tag_yaw != other.tag_yaw: + return False + if self.base_roll != other.base_roll: + return False + if self.base_pitch != other.base_pitch: + return False + if self.base_yaw != other.base_yaw: + return False + if all(self.joystick != other.joystick): + return False + if self.error_state != other.error_state: + return False + if self.buttons != other.buttons: + return False + if self.enabled_from_app != other.enabled_from_app: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def version(self): + """Message field 'version'.""" + return self._version + + @version.setter + def version(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.uint8, \ + "The 'version' numpy.ndarray() must have the dtype of 'numpy.uint8'" + assert value.size == 2, \ + "The 'version' numpy.ndarray() must have a size of 2" + self._version = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, int) for v in value) and + all(val >= 0 and val < 256 for val in value)), \ + "The 'version' field must be a set or sequence with length 2 and each value of type 'int' and each unsigned integer in [0, 255]" + self._version = numpy.array(value, dtype=numpy.uint8) + + @property + def channel(self): + """Message field 'channel'.""" + return self._channel + + @channel.setter + def channel(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'channel' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'channel' field must be an unsigned integer in [0, 255]" + self._channel = value + + @property + def joy_mode(self): + """Message field 'joy_mode'.""" + return self._joy_mode + + @joy_mode.setter + def joy_mode(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'joy_mode' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'joy_mode' field must be an unsigned integer in [0, 255]" + self._joy_mode = value + + @property + def orientation_est(self): + """Message field 'orientation_est'.""" + return self._orientation_est + + @orientation_est.setter + def orientation_est(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'orientation_est' field must be of type 'float'" + self._orientation_est = value + + @property + def pitch_est(self): + """Message field 'pitch_est'.""" + return self._pitch_est + + @pitch_est.setter + def pitch_est(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'pitch_est' field must be of type 'float'" + self._pitch_est = value + + @property + def distance_est(self): + """Message field 'distance_est'.""" + return self._distance_est + + @distance_est.setter + def distance_est(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'distance_est' field must be of type 'float'" + self._distance_est = value + + @property + def yaw_est(self): + """Message field 'yaw_est'.""" + return self._yaw_est + + @yaw_est.setter + def yaw_est(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'yaw_est' field must be of type 'float'" + self._yaw_est = value + + @property + def tag_roll(self): + """Message field 'tag_roll'.""" + return self._tag_roll + + @tag_roll.setter + def tag_roll(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'tag_roll' field must be of type 'float'" + self._tag_roll = value + + @property + def tag_pitch(self): + """Message field 'tag_pitch'.""" + return self._tag_pitch + + @tag_pitch.setter + def tag_pitch(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'tag_pitch' field must be of type 'float'" + self._tag_pitch = value + + @property + def tag_yaw(self): + """Message field 'tag_yaw'.""" + return self._tag_yaw + + @tag_yaw.setter + def tag_yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'tag_yaw' field must be of type 'float'" + self._tag_yaw = value + + @property + def base_roll(self): + """Message field 'base_roll'.""" + return self._base_roll + + @base_roll.setter + def base_roll(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'base_roll' field must be of type 'float'" + self._base_roll = value + + @property + def base_pitch(self): + """Message field 'base_pitch'.""" + return self._base_pitch + + @base_pitch.setter + def base_pitch(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'base_pitch' field must be of type 'float'" + self._base_pitch = value + + @property + def base_yaw(self): + """Message field 'base_yaw'.""" + return self._base_yaw + + @base_yaw.setter + def base_yaw(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'base_yaw' field must be of type 'float'" + self._base_yaw = value + + @property + def joystick(self): + """Message field 'joystick'.""" + return self._joystick + + @joystick.setter + def joystick(self, value): + if isinstance(value, numpy.ndarray): + assert value.dtype == numpy.float32, \ + "The 'joystick' numpy.ndarray() must have the dtype of 'numpy.float32'" + assert value.size == 2, \ + "The 'joystick' numpy.ndarray() must have a size of 2" + self._joystick = value + return + if __debug__: + from collections.abc import Sequence + from collections.abc import Set + from collections import UserList + from collections import UserString + assert \ + ((isinstance(value, Sequence) or + isinstance(value, Set) or + isinstance(value, UserList)) and + not isinstance(value, str) and + not isinstance(value, UserString) and + len(value) == 2 and + all(isinstance(v, float) for v in value) and + True), \ + "The 'joystick' field must be a set or sequence with length 2 and each value of type 'float'" + self._joystick = numpy.array(value, dtype=numpy.float32) + + @property + def error_state(self): + """Message field 'error_state'.""" + return self._error_state + + @error_state.setter + def error_state(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'error_state' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'error_state' field must be an unsigned integer in [0, 255]" + self._error_state = value + + @property + def buttons(self): + """Message field 'buttons'.""" + return self._buttons + + @buttons.setter + def buttons(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'buttons' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'buttons' field must be an unsigned integer in [0, 255]" + self._buttons = value + + @property + def enabled_from_app(self): + """Message field 'enabled_from_app'.""" + return self._enabled_from_app + + @enabled_from_app.setter + def enabled_from_app(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'enabled_from_app' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'enabled_from_app' field must be an unsigned integer in [0, 255]" + self._enabled_from_app = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state_s.c new file mode 100644 index 0000000..c551163 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_state_s.c @@ -0,0 +1,465 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/uwb_state__struct.h" +#include "unitree_go/msg/detail/uwb_state__functions.h" + +#include "rosidl_runtime_c/primitives_sequence.h" +#include "rosidl_runtime_c/primitives_sequence_functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__uwb_state__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[35]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._uwb_state.UwbState", full_classname_dest, 34) == 0); + } + unitree_go__msg__UwbState * ros_message = _ros_message; + { // version + PyObject * field = PyObject_GetAttrString(_pymsg, "version"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + Py_ssize_t size = 2; + uint8_t * dest = ros_message->version; + for (Py_ssize_t i = 0; i < size; ++i) { + uint8_t tmp = *(npy_uint8 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(uint8_t)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // channel + PyObject * field = PyObject_GetAttrString(_pymsg, "channel"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->channel = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // joy_mode + PyObject * field = PyObject_GetAttrString(_pymsg, "joy_mode"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->joy_mode = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // orientation_est + PyObject * field = PyObject_GetAttrString(_pymsg, "orientation_est"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->orientation_est = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // pitch_est + PyObject * field = PyObject_GetAttrString(_pymsg, "pitch_est"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->pitch_est = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // distance_est + PyObject * field = PyObject_GetAttrString(_pymsg, "distance_est"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->distance_est = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // yaw_est + PyObject * field = PyObject_GetAttrString(_pymsg, "yaw_est"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->yaw_est = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // tag_roll + PyObject * field = PyObject_GetAttrString(_pymsg, "tag_roll"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->tag_roll = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // tag_pitch + PyObject * field = PyObject_GetAttrString(_pymsg, "tag_pitch"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->tag_pitch = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // tag_yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "tag_yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->tag_yaw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // base_roll + PyObject * field = PyObject_GetAttrString(_pymsg, "base_roll"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->base_roll = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // base_pitch + PyObject * field = PyObject_GetAttrString(_pymsg, "base_pitch"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->base_pitch = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // base_yaw + PyObject * field = PyObject_GetAttrString(_pymsg, "base_yaw"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->base_yaw = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // joystick + PyObject * field = PyObject_GetAttrString(_pymsg, "joystick"); + if (!field) { + return false; + } + { + // TODO(dirk-thomas) use a better way to check the type before casting + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + Py_INCREF(seq_field); + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + Py_ssize_t size = 2; + float * dest = ros_message->joystick; + for (Py_ssize_t i = 0; i < size; ++i) { + float tmp = *(npy_float32 *)PyArray_GETPTR1(seq_field, i); + memcpy(&dest[i], &tmp, sizeof(float)); + } + Py_DECREF(seq_field); + } + Py_DECREF(field); + } + { // error_state + PyObject * field = PyObject_GetAttrString(_pymsg, "error_state"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->error_state = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // buttons + PyObject * field = PyObject_GetAttrString(_pymsg, "buttons"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->buttons = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + { // enabled_from_app + PyObject * field = PyObject_GetAttrString(_pymsg, "enabled_from_app"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->enabled_from_app = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__uwb_state__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of UwbState */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._uwb_state"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "UwbState"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__UwbState * ros_message = (unitree_go__msg__UwbState *)raw_ros_message; + { // version + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "version"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_UINT8); + assert(sizeof(npy_uint8) == sizeof(uint8_t)); + npy_uint8 * dst = (npy_uint8 *)PyArray_GETPTR1(seq_field, 0); + uint8_t * src = &(ros_message->version[0]); + memcpy(dst, src, 2 * sizeof(uint8_t)); + Py_DECREF(field); + } + { // channel + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->channel); + { + int rc = PyObject_SetAttrString(_pymessage, "channel", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // joy_mode + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->joy_mode); + { + int rc = PyObject_SetAttrString(_pymessage, "joy_mode", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // orientation_est + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->orientation_est); + { + int rc = PyObject_SetAttrString(_pymessage, "orientation_est", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // pitch_est + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->pitch_est); + { + int rc = PyObject_SetAttrString(_pymessage, "pitch_est", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // distance_est + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->distance_est); + { + int rc = PyObject_SetAttrString(_pymessage, "distance_est", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // yaw_est + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->yaw_est); + { + int rc = PyObject_SetAttrString(_pymessage, "yaw_est", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // tag_roll + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->tag_roll); + { + int rc = PyObject_SetAttrString(_pymessage, "tag_roll", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // tag_pitch + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->tag_pitch); + { + int rc = PyObject_SetAttrString(_pymessage, "tag_pitch", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // tag_yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->tag_yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "tag_yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // base_roll + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->base_roll); + { + int rc = PyObject_SetAttrString(_pymessage, "base_roll", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // base_pitch + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->base_pitch); + { + int rc = PyObject_SetAttrString(_pymessage, "base_pitch", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // base_yaw + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->base_yaw); + { + int rc = PyObject_SetAttrString(_pymessage, "base_yaw", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // joystick + PyObject * field = NULL; + field = PyObject_GetAttrString(_pymessage, "joystick"); + if (!field) { + return NULL; + } + assert(field->ob_type != NULL); + assert(field->ob_type->tp_name != NULL); + assert(strcmp(field->ob_type->tp_name, "numpy.ndarray") == 0); + PyArrayObject * seq_field = (PyArrayObject *)field; + assert(PyArray_NDIM(seq_field) == 1); + assert(PyArray_TYPE(seq_field) == NPY_FLOAT32); + assert(sizeof(npy_float32) == sizeof(float)); + npy_float32 * dst = (npy_float32 *)PyArray_GETPTR1(seq_field, 0); + float * src = &(ros_message->joystick[0]); + memcpy(dst, src, 2 * sizeof(float)); + Py_DECREF(field); + } + { // error_state + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->error_state); + { + int rc = PyObject_SetAttrString(_pymessage, "error_state", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // buttons + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->buttons); + { + int rc = PyObject_SetAttrString(_pymessage, "buttons", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // enabled_from_app + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->enabled_from_app); + { + int rc = PyObject_SetAttrString(_pymessage, "enabled_from_app", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch.py new file mode 100644 index 0000000..5d28dcb --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch.py @@ -0,0 +1,124 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/UwbSwitch.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_UwbSwitch(type): + """Metaclass of message 'UwbSwitch'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.UwbSwitch') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__uwb_switch + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__uwb_switch + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__uwb_switch + cls._TYPE_SUPPORT = module.type_support_msg__msg__uwb_switch + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__uwb_switch + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class UwbSwitch(metaclass=Metaclass_UwbSwitch): + """Message class 'UwbSwitch'.""" + + __slots__ = [ + '_enabled', + ] + + _fields_and_field_types = { + 'enabled': 'uint8', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('uint8'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.enabled = kwargs.get('enabled', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.enabled != other.enabled: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def enabled(self): + """Message field 'enabled'.""" + return self._enabled + + @enabled.setter + def enabled(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'enabled' field must be of type 'int'" + assert value >= 0 and value < 256, \ + "The 'enabled' field must be an unsigned integer in [0, 255]" + self._enabled = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch_s.c new file mode 100644 index 0000000..64fae02 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_uwb_switch_s.c @@ -0,0 +1,98 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/uwb_switch__struct.h" +#include "unitree_go/msg/detail/uwb_switch__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__uwb_switch__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[37]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._uwb_switch.UwbSwitch", full_classname_dest, 36) == 0); + } + unitree_go__msg__UwbSwitch * ros_message = _ros_message; + { // enabled + PyObject * field = PyObject_GetAttrString(_pymsg, "enabled"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->enabled = (uint8_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__uwb_switch__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of UwbSwitch */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._uwb_switch"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "UwbSwitch"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__UwbSwitch * ros_message = (unitree_go__msg__UwbSwitch *)raw_ros_message; + { // enabled + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->enabled); + { + int rc = PyObject_SetAttrString(_pymessage, "enabled", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller.py b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller.py new file mode 100644 index 0000000..ceeb80a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller.py @@ -0,0 +1,200 @@ +# generated from rosidl_generator_py/resource/_idl.py.em +# with input from unitree_go:msg/WirelessController.idl +# generated code does not contain a copyright notice + + +# Import statements for member types + +import rosidl_parser.definition # noqa: E402, I100 + + +class Metaclass_WirelessController(type): + """Metaclass of message 'WirelessController'.""" + + _CREATE_ROS_MESSAGE = None + _CONVERT_FROM_PY = None + _CONVERT_TO_PY = None + _DESTROY_ROS_MESSAGE = None + _TYPE_SUPPORT = None + + __constants = { + } + + @classmethod + def __import_type_support__(cls): + try: + from rosidl_generator_py import import_type_support + module = import_type_support('unitree_go') + except ImportError: + import logging + import traceback + logger = logging.getLogger( + 'unitree_go.msg.WirelessController') + logger.debug( + 'Failed to import needed modules for type support:\n' + + traceback.format_exc()) + else: + cls._CREATE_ROS_MESSAGE = module.create_ros_message_msg__msg__wireless_controller + cls._CONVERT_FROM_PY = module.convert_from_py_msg__msg__wireless_controller + cls._CONVERT_TO_PY = module.convert_to_py_msg__msg__wireless_controller + cls._TYPE_SUPPORT = module.type_support_msg__msg__wireless_controller + cls._DESTROY_ROS_MESSAGE = module.destroy_ros_message_msg__msg__wireless_controller + + @classmethod + def __prepare__(cls, name, bases, **kwargs): + # list constant names here so that they appear in the help text of + # the message class under "Data and other attributes defined here:" + # as well as populate each message instance + return { + } + + +class WirelessController(metaclass=Metaclass_WirelessController): + """Message class 'WirelessController'.""" + + __slots__ = [ + '_lx', + '_ly', + '_rx', + '_ry', + '_keys', + ] + + _fields_and_field_types = { + 'lx': 'float', + 'ly': 'float', + 'rx': 'float', + 'ry': 'float', + 'keys': 'uint16', + } + + SLOT_TYPES = ( + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('float'), # noqa: E501 + rosidl_parser.definition.BasicType('uint16'), # noqa: E501 + ) + + def __init__(self, **kwargs): + assert all('_' + key in self.__slots__ for key in kwargs.keys()), \ + 'Invalid arguments passed to constructor: %s' % \ + ', '.join(sorted(k for k in kwargs.keys() if '_' + k not in self.__slots__)) + self.lx = kwargs.get('lx', float()) + self.ly = kwargs.get('ly', float()) + self.rx = kwargs.get('rx', float()) + self.ry = kwargs.get('ry', float()) + self.keys = kwargs.get('keys', int()) + + def __repr__(self): + typename = self.__class__.__module__.split('.') + typename.pop() + typename.append(self.__class__.__name__) + args = [] + for s, t in zip(self.__slots__, self.SLOT_TYPES): + field = getattr(self, s) + fieldstr = repr(field) + # We use Python array type for fields that can be directly stored + # in them, and "normal" sequences for everything else. If it is + # a type that we store in an array, strip off the 'array' portion. + if ( + isinstance(t, rosidl_parser.definition.AbstractSequence) and + isinstance(t.value_type, rosidl_parser.definition.BasicType) and + t.value_type.typename in ['float', 'double', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'] + ): + if len(field) == 0: + fieldstr = '[]' + else: + assert fieldstr.startswith('array(') + prefix = "array('X', " + suffix = ')' + fieldstr = fieldstr[len(prefix):-len(suffix)] + args.append(s[1:] + '=' + fieldstr) + return '%s(%s)' % ('.'.join(typename), ', '.join(args)) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + if self.lx != other.lx: + return False + if self.ly != other.ly: + return False + if self.rx != other.rx: + return False + if self.ry != other.ry: + return False + if self.keys != other.keys: + return False + return True + + @classmethod + def get_fields_and_field_types(cls): + from copy import copy + return copy(cls._fields_and_field_types) + + @property + def lx(self): + """Message field 'lx'.""" + return self._lx + + @lx.setter + def lx(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'lx' field must be of type 'float'" + self._lx = value + + @property + def ly(self): + """Message field 'ly'.""" + return self._ly + + @ly.setter + def ly(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'ly' field must be of type 'float'" + self._ly = value + + @property + def rx(self): + """Message field 'rx'.""" + return self._rx + + @rx.setter + def rx(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'rx' field must be of type 'float'" + self._rx = value + + @property + def ry(self): + """Message field 'ry'.""" + return self._ry + + @ry.setter + def ry(self, value): + if __debug__: + assert \ + isinstance(value, float), \ + "The 'ry' field must be of type 'float'" + self._ry = value + + @property + def keys(self): + """Message field 'keys'.""" + return self._keys + + @keys.setter + def keys(self, value): + if __debug__: + assert \ + isinstance(value, int), \ + "The 'keys' field must be of type 'int'" + assert value >= 0 and value < 65536, \ + "The 'keys' field must be an unsigned integer in [0, 65535]" + self._keys = value diff --git a/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller_s.c b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller_s.c new file mode 100644 index 0000000..f02defc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/lib/python3.8/site-packages/unitree_go/msg/_wireless_controller_s.c @@ -0,0 +1,178 @@ +// generated from rosidl_generator_py/resource/_idl_support.c.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include +#include +#ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif +#include "numpy/ndarrayobject.h" +#ifndef _WIN32 +# pragma GCC diagnostic pop +#endif +#include "rosidl_runtime_c/visibility_control.h" +#include "unitree_go/msg/detail/wireless_controller__struct.h" +#include "unitree_go/msg/detail/wireless_controller__functions.h" + + +ROSIDL_GENERATOR_C_EXPORT +bool unitree_go__msg__wireless_controller__convert_from_py(PyObject * _pymsg, void * _ros_message) +{ + // check that the passed message is of the expected Python class + { + char full_classname_dest[55]; + { + char * class_name = NULL; + char * module_name = NULL; + { + PyObject * class_attr = PyObject_GetAttrString(_pymsg, "__class__"); + if (class_attr) { + PyObject * name_attr = PyObject_GetAttrString(class_attr, "__name__"); + if (name_attr) { + class_name = (char *)PyUnicode_1BYTE_DATA(name_attr); + Py_DECREF(name_attr); + } + PyObject * module_attr = PyObject_GetAttrString(class_attr, "__module__"); + if (module_attr) { + module_name = (char *)PyUnicode_1BYTE_DATA(module_attr); + Py_DECREF(module_attr); + } + Py_DECREF(class_attr); + } + } + if (!class_name || !module_name) { + return false; + } + snprintf(full_classname_dest, sizeof(full_classname_dest), "%s.%s", module_name, class_name); + } + assert(strncmp("unitree_go.msg._wireless_controller.WirelessController", full_classname_dest, 54) == 0); + } + unitree_go__msg__WirelessController * ros_message = _ros_message; + { // lx + PyObject * field = PyObject_GetAttrString(_pymsg, "lx"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->lx = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // ly + PyObject * field = PyObject_GetAttrString(_pymsg, "ly"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->ly = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // rx + PyObject * field = PyObject_GetAttrString(_pymsg, "rx"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->rx = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // ry + PyObject * field = PyObject_GetAttrString(_pymsg, "ry"); + if (!field) { + return false; + } + assert(PyFloat_Check(field)); + ros_message->ry = (float)PyFloat_AS_DOUBLE(field); + Py_DECREF(field); + } + { // keys + PyObject * field = PyObject_GetAttrString(_pymsg, "keys"); + if (!field) { + return false; + } + assert(PyLong_Check(field)); + ros_message->keys = (uint16_t)PyLong_AsUnsignedLong(field); + Py_DECREF(field); + } + + return true; +} + +ROSIDL_GENERATOR_C_EXPORT +PyObject * unitree_go__msg__wireless_controller__convert_to_py(void * raw_ros_message) +{ + /* NOTE(esteve): Call constructor of WirelessController */ + PyObject * _pymessage = NULL; + { + PyObject * pymessage_module = PyImport_ImportModule("unitree_go.msg._wireless_controller"); + assert(pymessage_module); + PyObject * pymessage_class = PyObject_GetAttrString(pymessage_module, "WirelessController"); + assert(pymessage_class); + Py_DECREF(pymessage_module); + _pymessage = PyObject_CallObject(pymessage_class, NULL); + Py_DECREF(pymessage_class); + if (!_pymessage) { + return NULL; + } + } + unitree_go__msg__WirelessController * ros_message = (unitree_go__msg__WirelessController *)raw_ros_message; + { // lx + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->lx); + { + int rc = PyObject_SetAttrString(_pymessage, "lx", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // ly + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->ly); + { + int rc = PyObject_SetAttrString(_pymessage, "ly", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // rx + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->rx); + { + int rc = PyObject_SetAttrString(_pymessage, "rx", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // ry + PyObject * field = NULL; + field = PyFloat_FromDouble(ros_message->ry); + { + int rc = PyObject_SetAttrString(_pymessage, "ry", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + { // keys + PyObject * field = NULL; + field = PyLong_FromUnsignedLong(ros_message->keys); + { + int rc = PyObject_SetAttrString(_pymessage, "keys", field); + Py_DECREF(field); + if (rc) { + return NULL; + } + } + } + + // ownership of _pymessage is transferred to the caller + return _pymessage; +} diff --git a/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/package_run_dependencies/unitree_go b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/package_run_dependencies/unitree_go new file mode 100644 index 0000000..cabffa8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/package_run_dependencies/unitree_go @@ -0,0 +1 @@ +geometry_msgs;rosidl_default_runtime;ament_lint_auto;ament_lint_common \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/packages/unitree_go b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/packages/unitree_go new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/parent_prefix_path/unitree_go b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/parent_prefix_path/unitree_go new file mode 100644 index 0000000..e053138 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/parent_prefix_path/unitree_go @@ -0,0 +1 @@ +/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/go2py_node:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_go:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_api:/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/hesai_ros_driver:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/unitree_go:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/unitree_api:/home/unitree/locomotion/unitree_ros2/cyclonedds_ws/install/rmw_cyclonedds_cpp:/opt/ros/foxy \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/rosidl_interfaces/unitree_go b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/rosidl_interfaces/unitree_go new file mode 100644 index 0000000..02ef2ab --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/ament_index/resource_index/rosidl_interfaces/unitree_go @@ -0,0 +1,44 @@ +msg/AudioData.idl +msg/AudioData.msg +msg/BmsCmd.idl +msg/BmsCmd.msg +msg/BmsState.idl +msg/BmsState.msg +msg/Error.idl +msg/Error.msg +msg/Go2FrontVideoData.idl +msg/Go2FrontVideoData.msg +msg/HeightMap.idl +msg/HeightMap.msg +msg/IMUState.idl +msg/IMUState.msg +msg/InterfaceConfig.idl +msg/InterfaceConfig.msg +msg/LidarState.idl +msg/LidarState.msg +msg/LowCmd.idl +msg/LowCmd.msg +msg/LowState.idl +msg/LowState.msg +msg/MotorCmd.idl +msg/MotorCmd.msg +msg/MotorState.idl +msg/MotorState.msg +msg/PathPoint.idl +msg/PathPoint.msg +msg/Req.idl +msg/Req.msg +msg/Res.idl +msg/Res.msg +msg/SportModeCmd.idl +msg/SportModeCmd.msg +msg/SportModeState.idl +msg/SportModeState.msg +msg/TimeSpec.idl +msg/TimeSpec.msg +msg/UwbState.idl +msg/UwbState.msg +msg/UwbSwitch.idl +msg/UwbSwitch.msg +msg/WirelessController.idl +msg/WirelessController.msg \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/colcon-core/packages/unitree_go b/deploy/robot_ws/install/unitree_go/share/colcon-core/packages/unitree_go new file mode 100644 index 0000000..c819a81 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/colcon-core/packages/unitree_go @@ -0,0 +1 @@ +geometry_msgs:rosidl_default_runtime \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_dependencies-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_dependencies-extras.cmake new file mode 100644 index 0000000..5b7890c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_dependencies-extras.cmake @@ -0,0 +1,92 @@ +# generated from ament_cmake_export_dependencies/cmake/ament_cmake_export_dependencies-extras.cmake.in + +set(_exported_dependencies "geometry_msgs;geometry_msgs;std_msgs;builtin_interfaces;rosidl_runtime_c;rosidl_typesupport_interface;geometry_msgs;std_msgs;builtin_interfaces;geometry_msgs;std_msgs;builtin_interfaces") + +find_package(ament_cmake_libraries QUIET REQUIRED) + +# find_package() all dependencies +# and append their DEFINITIONS INCLUDE_DIRS, LIBRARIES, and LINK_FLAGS +# variables to unitree_go_DEFINITIONS, unitree_go_INCLUDE_DIRS, +# unitree_go_LIBRARIES, and unitree_go_LINK_FLAGS. +# Additionally collect the direct dependency names in +# unitree_go_DEPENDENCIES as well as the recursive dependency names +# in unitree_go_RECURSIVE_DEPENDENCIES. +if(NOT _exported_dependencies STREQUAL "") + find_package(ament_cmake_core QUIET REQUIRED) + set(unitree_go_DEPENDENCIES ${_exported_dependencies}) + set(unitree_go_RECURSIVE_DEPENDENCIES ${_exported_dependencies}) + set(_libraries) + foreach(_dep ${_exported_dependencies}) + if(NOT ${_dep}_FOUND) + find_package("${_dep}" QUIET REQUIRED) + endif() + # if a package provides modern CMake interface targets use them + # exclusively assuming the classic CMake variables only exist for + # backward compatibility + set(use_modern_cmake FALSE) + if(NOT "${${_dep}_TARGETS}" STREQUAL "") + foreach(_target ${${_dep}_TARGETS}) + # only use actual targets + # in case a package uses this variable for other content + if(TARGET "${_target}") + get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES) + if(_include_dirs) + list_append_unique(unitree_go_INCLUDE_DIRS "${_include_dirs}") + endif() + + get_target_property(_imported_configurations ${_target} IMPORTED_CONFIGURATIONS) + if(_imported_configurations) + string(TOUPPER "${_imported_configurations}" _imported_configurations) + if(DEBUG_CONFIGURATIONS) + string(TOUPPER "${DEBUG_CONFIGURATIONS}" _debug_configurations_uppercase) + else() + set(_debug_configurations_uppercase "DEBUG") + endif() + foreach(_imported_config ${_imported_configurations}) + get_target_property(_imported_implib ${_target} IMPORTED_IMPLIB_${_imported_config}) + if(_imported_implib) + set(_imported_implib_config "optimized") + if(${_imported_config} IN_LIST _debug_configurations_uppercase) + set(_imported_implib_config "debug") + endif() + list(APPEND _libraries ${_imported_implib_config} ${_imported_implib}) + else() + get_target_property(_imported_location ${_target} IMPORTED_LOCATION_${_imported_config}) + if(_imported_location) + list(APPEND _libraries "${_imported_location}") + endif() + endif() + endforeach() + endif() + + get_target_property(_link_libraries ${_target} INTERFACE_LINK_LIBRARIES) + if(_link_libraries) + list(APPEND _libraries "${_link_libraries}") + endif() + set(use_modern_cmake TRUE) + endif() + endforeach() + endif() + if(NOT use_modern_cmake) + if(${_dep}_DEFINITIONS) + list_append_unique(unitree_go_DEFINITIONS "${${_dep}_DEFINITIONS}") + endif() + if(${_dep}_INCLUDE_DIRS) + list_append_unique(unitree_go_INCLUDE_DIRS "${${_dep}_INCLUDE_DIRS}") + endif() + if(${_dep}_LIBRARIES) + list(APPEND _libraries "${${_dep}_LIBRARIES}") + endif() + if(${_dep}_LINK_FLAGS) + list_append_unique(unitree_go_LINK_FLAGS "${${_dep}_LINK_FLAGS}") + endif() + if(${_dep}_RECURSIVE_DEPENDENCIES) + list_append_unique(unitree_go_RECURSIVE_DEPENDENCIES "${${_dep}_RECURSIVE_DEPENDENCIES}") + endif() + endif() + if(_libraries) + ament_libraries_deduplicate(_libraries "${_libraries}") + list(APPEND unitree_go_LIBRARIES "${_libraries}") + endif() + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_include_directories-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_include_directories-extras.cmake new file mode 100644 index 0000000..00975c3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_include_directories-extras.cmake @@ -0,0 +1,16 @@ +# generated from ament_cmake_export_include_directories/cmake/ament_cmake_export_include_directories-extras.cmake.in + +set(_exported_include_dirs "${unitree_go_DIR}/../../../include") + +# append include directories to unitree_go_INCLUDE_DIRS +# warn about not existing paths +if(NOT _exported_include_dirs STREQUAL "") + find_package(ament_cmake_core QUIET REQUIRED) + foreach(_exported_include_dir ${_exported_include_dirs}) + if(NOT IS_DIRECTORY "${_exported_include_dir}") + message(WARNING "Package 'unitree_go' exports the include directory '${_exported_include_dir}' which doesn't exist") + endif() + normalize_path(_exported_include_dir "${_exported_include_dir}") + list(APPEND unitree_go_INCLUDE_DIRS "${_exported_include_dir}") + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_libraries-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_libraries-extras.cmake new file mode 100644 index 0000000..0e66abf --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_libraries-extras.cmake @@ -0,0 +1,140 @@ +# generated from ament_cmake_export_libraries/cmake/template/ament_cmake_export_libraries.cmake.in + +set(_exported_libraries "unitree_go__rosidl_generator_c;unitree_go__rosidl_typesupport_c;unitree_go__rosidl_typesupport_cpp") +set(_exported_library_names "") + +# populate unitree_go_LIBRARIES +if(NOT _exported_libraries STREQUAL "") + # loop over libraries, either target names or absolute paths + list(LENGTH _exported_libraries _length) + set(_i 0) + while(_i LESS _length) + list(GET _exported_libraries ${_i} _arg) + + # pass linker flags along + if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") + list(APPEND unitree_go_LIBRARIES "${_arg}") + math(EXPR _i "${_i} + 1") + continue() + endif() + + if("${_arg}" MATCHES "^(debug|optimized|general)$") + # remember build configuration keyword + # and get following library + set(_cfg "${_arg}") + math(EXPR _i "${_i} + 1") + if(_i EQUAL _length) + message(FATAL_ERROR "Package 'unitree_go' passes the build configuration keyword '${_cfg}' as the last exported library") + endif() + list(GET _exported_libraries ${_i} _library) + else() + # the value is a library without a build configuration keyword + set(_cfg "") + set(_library "${_arg}") + endif() + math(EXPR _i "${_i} + 1") + + if(NOT IS_ABSOLUTE "${_library}") + # search for library target relative to this CMake file + set(_lib "NOTFOUND") + find_library( + _lib NAMES "${_library}" + PATHS "${unitree_go_DIR}/../../../lib" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + if(NOT _lib) + # warn about not existing library and ignore it + message(FATAL_ERROR "Package 'unitree_go' exports the library '${_library}' which couldn't be found") + elseif(NOT IS_ABSOLUTE "${_lib}") + # the found library must be an absolute path + message(FATAL_ERROR "Package 'unitree_go' found the library '${_library}' at '${_lib}' which is not an absolute path") + elseif(NOT EXISTS "${_lib}") + # the found library must exist + message(FATAL_ERROR "Package 'unitree_go' found the library '${_lib}' which doesn't exist") + else() + list(APPEND unitree_go_LIBRARIES ${_cfg} "${_lib}") + endif() + + else() + if(NOT EXISTS "${_library}") + # the found library must exist + message(WARNING "Package 'unitree_go' exports the library '${_library}' which doesn't exist") + else() + list(APPEND unitree_go_LIBRARIES ${_cfg} "${_library}") + endif() + endif() + endwhile() +endif() + +# find_library() library names with optional LIBRARY_DIRS +# and add the libraries to unitree_go_LIBRARIES +if(NOT _exported_library_names STREQUAL "") + # loop over library names + # but remember related build configuration keyword if available + list(LENGTH _exported_library_names _length) + set(_i 0) + while(_i LESS _length) + list(GET _exported_library_names ${_i} _arg) + # pass linker flags along + if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]") + list(APPEND unitree_go_LIBRARIES "${_arg}") + math(EXPR _i "${_i} + 1") + continue() + endif() + + if("${_arg}" MATCHES "^(debug|optimized|general)$") + # remember build configuration keyword + # and get following library name + set(_cfg "${_arg}") + math(EXPR _i "${_i} + 1") + if(_i EQUAL _length) + message(FATAL_ERROR "Package 'unitree_go' passes the build configuration keyword '${_cfg}' as the last exported target") + endif() + list(GET _exported_library_names ${_i} _library) + else() + # the value is a library target without a build configuration keyword + set(_cfg "") + set(_library "${_arg}") + endif() + math(EXPR _i "${_i} + 1") + + # extract optional LIBRARY_DIRS from library name + string(REPLACE ":" ";" _library_dirs "${_library}") + list(GET _library_dirs 0 _library_name) + list(REMOVE_AT _library_dirs 0) + + set(_lib "NOTFOUND") + if(NOT _library_dirs) + # search for library in the common locations + find_library( + _lib + NAMES "${_library_name}" + ) + if(NOT _lib) + # warn about not existing library and later ignore it + message(WARNING "Package 'unitree_go' exports library '${_library_name}' which couldn't be found") + endif() + else() + # search for library in the specified directories + find_library( + _lib + NAMES "${_library_name}" + PATHS ${_library_dirs} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + if(NOT _lib) + # warn about not existing library and later ignore it + message(WARNING "Package 'unitree_go' exports library '${_library_name}' with LIBRARY_DIRS '${_library_dirs}' which couldn't be found") + endif() + endif() + if(_lib) + list(APPEND unitree_go_LIBRARIES ${_cfg} "${_lib}") + endif() + endwhile() +endif() + +# TODO(dirk-thomas) deduplicate unitree_go_LIBRARIES +# while maintaining library order +# as well as build configuration keywords +# as well as linker flags diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_targets-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_targets-extras.cmake new file mode 100644 index 0000000..352e169 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/ament_cmake_export_targets-extras.cmake @@ -0,0 +1,27 @@ +# generated from ament_cmake_export_targets/cmake/ament_cmake_export_targets-extras.cmake.in + +set(_exported_targets "unitree_go__rosidl_generator_c;unitree_go__rosidl_typesupport_introspection_c;unitree_go__rosidl_typesupport_c;unitree_go__rosidl_generator_cpp;unitree_go__rosidl_typesupport_introspection_cpp;unitree_go__rosidl_typesupport_cpp") + +# include all exported targets +if(NOT _exported_targets STREQUAL "") + foreach(_target ${_exported_targets}) + set(_export_file "${unitree_go_DIR}/${_target}Export.cmake") + include("${_export_file}") + + # extract the target names associated with the export + set(_regex "foreach\\((_cmake)?_expected_?[Tt]arget (IN ITEMS )?(.+)\\)") + file( + STRINGS "${_export_file}" _foreach_targets + REGEX "${_regex}") + list(LENGTH _foreach_targets _matches) + if(NOT _matches EQUAL 1) + message(FATAL_ERROR + "Failed to find exported target names in '${_export_file}'") + endif() + string(REGEX REPLACE "${_regex}" "\\3" _targets "${_foreach_targets}") + string(REPLACE " " ";" _targets "${_targets}") + list(LENGTH _targets _length) + + list(APPEND unitree_go_TARGETS ${_targets}) + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake-extras.cmake new file mode 100644 index 0000000..7f78ab3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake-extras.cmake @@ -0,0 +1,4 @@ +# generated from rosidl_cmake/cmake/rosidl_cmake-extras.cmake.in + +set(unitree_go_IDL_FILES "msg/AudioData.idl;msg/BmsCmd.idl;msg/BmsState.idl;msg/Error.idl;msg/Go2FrontVideoData.idl;msg/HeightMap.idl;msg/IMUState.idl;msg/InterfaceConfig.idl;msg/LidarState.idl;msg/LowCmd.idl;msg/LowState.idl;msg/MotorCmd.idl;msg/MotorState.idl;msg/PathPoint.idl;msg/Req.idl;msg/Res.idl;msg/SportModeCmd.idl;msg/SportModeState.idl;msg/TimeSpec.idl;msg/UwbState.idl;msg/UwbSwitch.idl;msg/WirelessController.idl") +set(unitree_go_INTERFACE_FILES "msg/AudioData.msg;msg/BmsCmd.msg;msg/BmsState.msg;msg/Error.msg;msg/Go2FrontVideoData.msg;msg/HeightMap.msg;msg/IMUState.msg;msg/InterfaceConfig.msg;msg/LidarState.msg;msg/LowCmd.msg;msg/LowState.msg;msg/MotorCmd.msg;msg/MotorState.msg;msg/PathPoint.msg;msg/Req.msg;msg/Res.msg;msg/SportModeCmd.msg;msg/SportModeState.msg;msg/TimeSpec.msg;msg/UwbState.msg;msg/UwbSwitch.msg;msg/WirelessController.msg") diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake new file mode 100644 index 0000000..43f28e2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake @@ -0,0 +1,46 @@ +# generated from +# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_libraries.cmake.in + +set(_exported_typesupport_libraries + "__rosidl_typesupport_fastrtps_c:unitree_go__rosidl_typesupport_fastrtps_c;__rosidl_typesupport_fastrtps_cpp:unitree_go__rosidl_typesupport_fastrtps_cpp") + +# populate unitree_go_LIBRARIES_ +if(NOT _exported_typesupport_libraries STREQUAL "") + # loop over typesupport libraries + foreach(_tuple ${_exported_typesupport_libraries}) + string(REPLACE ":" ";" _tuple "${_tuple}") + list(GET _tuple 0 _suffix) + list(GET _tuple 1 _library) + + if(NOT IS_ABSOLUTE "${_library}") + # search for library target relative to this CMake file + set(_lib "NOTFOUND") + find_library( + _lib NAMES "${_library}" + PATHS "${unitree_go_DIR}/../../../lib" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH + ) + + if(NOT _lib) + # the library wasn't found + message(FATAL_ERROR "Package 'unitree_go' exports the typesupport library '${_library}' which couldn't be found") + elseif(NOT IS_ABSOLUTE "${_lib}") + # the found library must be an absolute path + message(FATAL_ERROR "Package 'unitree_go' found the typesupport library '${_library}' at '${_lib}' which is not an absolute path") + elseif(NOT EXISTS "${_lib}") + # the found library must exist + message(FATAL_ERROR "Package 'unitree_go' found the typesupport library '${_lib}' which doesn't exist") + else() + list(APPEND unitree_go_LIBRARIES${_suffix} ${_cfg} "${_lib}") + endif() + + else() + if(NOT EXISTS "${_library}") + # the found library must exist + message(WARNING "Package 'unitree_go' exports the typesupport library '${_library}' which doesn't exist") + else() + list(APPEND unitree_go_LIBRARIES${_suffix} "${_library}") + endif() + endif() + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake new file mode 100644 index 0000000..1243d23 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake @@ -0,0 +1,23 @@ +# generated from +# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_targets.cmake.in + +set(_exported_typesupport_targets + "__rosidl_typesupport_introspection_c:unitree_go__rosidl_typesupport_introspection_c;__rosidl_typesupport_introspection_cpp:unitree_go__rosidl_typesupport_introspection_cpp") + +# populate unitree_go_TARGETS_ +if(NOT _exported_typesupport_targets STREQUAL "") + # loop over typesupport targets + foreach(_tuple ${_exported_typesupport_targets}) + string(REPLACE ":" ";" _tuple "${_tuple}") + list(GET _tuple 0 _suffix) + list(GET _tuple 1 _target) + + set(_target "unitree_go::${_target}") + if(NOT TARGET "${_target}") + # the exported target must exist + message(WARNING "Package 'unitree_go' exports the typesupport target '${_target}' which doesn't exist") + else() + list(APPEND unitree_go_TARGETS${_suffix} "${_target}") + endif() + endforeach() +endif() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig-version.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig-version.cmake new file mode 100644 index 0000000..7beb732 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig-version.cmake @@ -0,0 +1,14 @@ +# generated from ament/cmake/core/templates/nameConfig-version.cmake.in +set(PACKAGE_VERSION "0.0.0") + +set(PACKAGE_VERSION_EXACT False) +set(PACKAGE_VERSION_COMPATIBLE False) + +if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_EXACT True) + set(PACKAGE_VERSION_COMPATIBLE True) +endif() + +if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE True) +endif() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig.cmake new file mode 100644 index 0000000..484f8ec --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_goConfig.cmake @@ -0,0 +1,42 @@ +# generated from ament/cmake/core/templates/nameConfig.cmake.in + +# prevent multiple inclusion +if(_unitree_go_CONFIG_INCLUDED) + # ensure to keep the found flag the same + if(NOT DEFINED unitree_go_FOUND) + # explicitly set it to FALSE, otherwise CMake will set it to TRUE + set(unitree_go_FOUND FALSE) + elseif(NOT unitree_go_FOUND) + # use separate condition to avoid uninitialized variable warning + set(unitree_go_FOUND FALSE) + endif() + return() +endif() +set(_unitree_go_CONFIG_INCLUDED TRUE) + +# output package information +if(NOT unitree_go_FIND_QUIETLY) + message(STATUS "Found unitree_go: 0.0.0 (${unitree_go_DIR})") +endif() + +# warn when using a deprecated package +if(NOT "" STREQUAL "") + set(_msg "Package 'unitree_go' is deprecated") + # append custom deprecation text if available + if(NOT "" STREQUAL "TRUE") + set(_msg "${_msg} ()") + endif() + # optionally quiet the deprecation message + if(NOT ${unitree_go_DEPRECATED_QUIET}) + message(DEPRECATION "${_msg}") + endif() +endif() + +# flag package as ament-based to distinguish it after being find_package()-ed +set(unitree_go_FOUND_AMENT_PACKAGE TRUE) + +# include all config extra files +set(_extras "rosidl_cmake-extras.cmake;ament_cmake_export_dependencies-extras.cmake;ament_cmake_export_libraries-extras.cmake;ament_cmake_export_targets-extras.cmake;ament_cmake_export_include_directories-extras.cmake;rosidl_cmake_export_typesupport_libraries-extras.cmake;rosidl_cmake_export_typesupport_targets-extras.cmake") +foreach(_extra ${_extras}) + include("${unitree_go_DIR}/${_extra}") +endforeach() diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport-noconfig.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport-noconfig.cmake new file mode 100644 index 0000000..020323e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_go::unitree_go__rosidl_generator_c" for configuration "" +set_property(TARGET unitree_go::unitree_go__rosidl_generator_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_go::unitree_go__rosidl_generator_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_generator_c.so" + IMPORTED_SONAME_NOCONFIG "libunitree_go__rosidl_generator_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_go::unitree_go__rosidl_generator_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_go::unitree_go__rosidl_generator_c "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_generator_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport.cmake new file mode 100644 index 0000000..81513c1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_go::unitree_go__rosidl_generator_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_go::unitree_go__rosidl_generator_c +add_library(unitree_go::unitree_go__rosidl_generator_c SHARED IMPORTED) + +set_target_properties(unitree_go::unitree_go__rosidl_generator_c PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rcutils::rcutils" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_go__rosidl_generator_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cppExport.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cppExport.cmake new file mode 100644 index 0000000..35fc6a2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_generator_cppExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_go::unitree_go__rosidl_generator_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_go::unitree_go__rosidl_generator_cpp +add_library(unitree_go::unitree_go__rosidl_generator_cpp INTERFACE IMPORTED) + +set_target_properties(unitree_go::unitree_go__rosidl_generator_cpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;rosidl_runtime_cpp::rosidl_runtime_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 3.0.0) + message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_go__rosidl_generator_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport-noconfig.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport-noconfig.cmake new file mode 100644 index 0000000..d0ccbc0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_go::unitree_go__rosidl_typesupport_c" for configuration "" +set_property(TARGET unitree_go::unitree_go__rosidl_typesupport_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_c.so" + IMPORTED_SONAME_NOCONFIG "libunitree_go__rosidl_typesupport_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_go::unitree_go__rosidl_typesupport_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_go::unitree_go__rosidl_typesupport_c "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport.cmake new file mode 100644 index 0000000..73793e0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_go::unitree_go__rosidl_typesupport_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_go::unitree_go__rosidl_typesupport_c +add_library(unitree_go::unitree_go__rosidl_typesupport_c SHARED IMPORTED) + +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_c PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_c::rosidl_typesupport_c;rosidl_typesupport_interface::rosidl_typesupport_interface;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_go__rosidl_typesupport_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport-noconfig.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport-noconfig.cmake new file mode 100644 index 0000000..8a7e93a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_go::unitree_go__rosidl_typesupport_cpp" for configuration "" +set_property(TARGET unitree_go::unitree_go__rosidl_typesupport_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_cpp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_cpp.so" + IMPORTED_SONAME_NOCONFIG "libunitree_go__rosidl_typesupport_cpp.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_go::unitree_go__rosidl_typesupport_cpp ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_go::unitree_go__rosidl_typesupport_cpp "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_cpp.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport.cmake new file mode 100644 index 0000000..58272c7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_cppExport.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_go::unitree_go__rosidl_typesupport_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_go::unitree_go__rosidl_typesupport_cpp +add_library(unitree_go::unitree_go__rosidl_typesupport_cpp SHARED IMPORTED) + +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_cpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_runtime_cpp::rosidl_runtime_cpp;rosidl_typesupport_cpp::rosidl_typesupport_cpp;rosidl_typesupport_interface::rosidl_typesupport_interface;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_go__rosidl_typesupport_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport-noconfig.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport-noconfig.cmake new file mode 100644 index 0000000..16dc0ed --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_go::unitree_go__rosidl_typesupport_introspection_c" for configuration "" +set_property(TARGET unitree_go::unitree_go__rosidl_typesupport_introspection_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_introspection_c PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_introspection_c.so" + IMPORTED_SONAME_NOCONFIG "libunitree_go__rosidl_typesupport_introspection_c.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_go::unitree_go__rosidl_typesupport_introspection_c ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_go::unitree_go__rosidl_typesupport_introspection_c "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_introspection_c.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport.cmake new file mode 100644 index 0000000..479d5ce --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cExport.cmake @@ -0,0 +1,114 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_go::unitree_go__rosidl_typesupport_introspection_c) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_go::unitree_go__rosidl_typesupport_introspection_c +add_library(unitree_go::unitree_go__rosidl_typesupport_introspection_c SHARED IMPORTED) + +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_introspection_c PROPERTIES + INTERFACE_LINK_LIBRARIES "unitree_go::unitree_go__rosidl_generator_c;rosidl_typesupport_introspection_c::rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_go__rosidl_typesupport_introspection_cExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# Make sure the targets which have been exported in some other +# export set exist. +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) +foreach(_target "unitree_go::unitree_go__rosidl_generator_c" ) + if(NOT TARGET "${_target}" ) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") + endif() +endforeach() + +if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + if(CMAKE_FIND_PACKAGE_NAME) + set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + else() + message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + endif() +endif() +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport-noconfig.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport-noconfig.cmake new file mode 100644 index 0000000..3cb5485 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport-noconfig.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "unitree_go::unitree_go__rosidl_typesupport_introspection_cpp" for configuration "" +set_property(TARGET unitree_go::unitree_go__rosidl_typesupport_introspection_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_introspection_cpp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_introspection_cpp.so" + IMPORTED_SONAME_NOCONFIG "libunitree_go__rosidl_typesupport_introspection_cpp.so" + ) + +list(APPEND _IMPORT_CHECK_TARGETS unitree_go::unitree_go__rosidl_typesupport_introspection_cpp ) +list(APPEND _IMPORT_CHECK_FILES_FOR_unitree_go::unitree_go__rosidl_typesupport_introspection_cpp "${_IMPORT_PREFIX}/lib/libunitree_go__rosidl_typesupport_introspection_cpp.so" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport.cmake b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport.cmake new file mode 100644 index 0000000..8fce41e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/cmake/unitree_go__rosidl_typesupport_introspection_cppExport.cmake @@ -0,0 +1,98 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget unitree_go::unitree_go__rosidl_typesupport_introspection_cpp) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target unitree_go::unitree_go__rosidl_typesupport_introspection_cpp +add_library(unitree_go::unitree_go__rosidl_typesupport_introspection_cpp SHARED IMPORTED) + +set_target_properties(unitree_go::unitree_go__rosidl_typesupport_introspection_cpp PROPERTIES + INTERFACE_LINK_LIBRARIES "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_introspection_cpp::rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_generator_c;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_c;geometry_msgs::geometry_msgs__rosidl_typesupport_c;geometry_msgs::geometry_msgs__rosidl_generator_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_cpp;geometry_msgs::geometry_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/unitree_go__rosidl_typesupport_introspection_cppExport-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.dsv new file mode 100644 index 0000000..79d4c95 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;AMENT_PREFIX_PATH; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.sh new file mode 100644 index 0000000..02e441b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/ament_prefix_path.sh @@ -0,0 +1,4 @@ +# copied from +# ament_cmake_core/cmake/environment_hooks/environment/ament_prefix_path.sh + +ament_prepend_unique_value AMENT_PREFIX_PATH "$AMENT_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.dsv new file mode 100644 index 0000000..89bec93 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.sh new file mode 100644 index 0000000..292e518 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/library_path.sh @@ -0,0 +1,16 @@ +# copied from ament_package/template/environment_hook/library_path.sh + +# detect if running on Darwin platform +_UNAME=`uname -s` +_IS_DARWIN=0 +if [ "$_UNAME" = "Darwin" ]; then + _IS_DARWIN=1 +fi +unset _UNAME + +if [ $_IS_DARWIN -eq 0 ]; then + ament_prepend_unique_value LD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" +else + ament_prepend_unique_value DYLD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib" +fi +unset _IS_DARWIN diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.dsv new file mode 100644 index 0000000..b94426a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate-if-exists;PATH;bin diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.sh new file mode 100644 index 0000000..e59b749 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/path.sh @@ -0,0 +1,5 @@ +# copied from ament_cmake_core/cmake/environment_hooks/environment/path.sh + +if [ -d "$AMENT_CURRENT_PREFIX/bin" ]; then + ament_prepend_unique_value PATH "$AMENT_CURRENT_PREFIX/bin" +fi diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.dsv new file mode 100644 index 0000000..84dbc4c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.sh new file mode 100644 index 0000000..7fe2b2f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/environment/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from ament_package/template/environment_hook/pythonpath.sh.in + +ament_prepend_unique_value PYTHONPATH "$AMENT_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.dsv new file mode 100644 index 0000000..e119f32 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;CMAKE_PREFIX_PATH; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.ps1 b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.ps1 new file mode 100644 index 0000000..d03facc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.sh new file mode 100644 index 0000000..a948e68 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/cmake_prefix_path.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.dsv new file mode 100644 index 0000000..89bec93 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;LD_LIBRARY_PATH;lib diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.ps1 b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.ps1 new file mode 100644 index 0000000..f6df601 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value LD_LIBRARY_PATH "$env:COLCON_CURRENT_PREFIX\lib" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.sh new file mode 100644 index 0000000..ca3c102 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/ld_library_path_lib.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value LD_LIBRARY_PATH "$COLCON_CURRENT_PREFIX/lib" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.dsv new file mode 100644 index 0000000..84dbc4c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.8/site-packages diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.ps1 b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.ps1 new file mode 100644 index 0000000..12877ef --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\lib/python3.8/site-packages" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.sh new file mode 100644 index 0000000..ed8efd9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/hook/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value PYTHONPATH "$COLCON_CURRENT_PREFIX/lib/python3.8/site-packages" diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.bash b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.bash new file mode 100644 index 0000000..49782f2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.bash @@ -0,0 +1,46 @@ +# generated from ament_package/template/package_level/local_setup.bash.in + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.dsv new file mode 100644 index 0000000..03d396a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.dsv @@ -0,0 +1,4 @@ +source;share/unitree_go/environment/ament_prefix_path.sh +source;share/unitree_go/environment/library_path.sh +source;share/unitree_go/environment/path.sh +source;share/unitree_go/environment/pythonpath.sh diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.sh new file mode 100644 index 0000000..855df3c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.sh @@ -0,0 +1,135 @@ +# generated from ament_package/template/package_level/local_setup.sh.in + +# since this file is sourced use either the provided AMENT_CURRENT_PREFIX +# or fall back to the destination set at configure time +: ${AMENT_CURRENT_PREFIX:="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_go"} +if [ ! -d "$AMENT_CURRENT_PREFIX" ]; then + if [ -z "$COLCON_CURRENT_PREFIX" ]; then + echo "The compile time prefix path '$AMENT_CURRENT_PREFIX' doesn't " \ + "exist. Consider sourcing a different extension than '.sh'." 1>&2 + else + AMENT_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" + fi +fi + +# function to append values to environment variables +# using colons as separators and avoiding leading separators +ament_append_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # avoid leading separator + eval _values=\"\$$_listname\" + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + _ament_append_value_IFS=$IFS + unset IFS + eval export $_listname=\"\$$_listname:$_value\" + #eval echo "append list \$$_listname" + IFS=$_ament_append_value_IFS + unset _ament_append_value_IFS + fi + unset _values + + unset _value + unset _listname +} + +# function to prepend non-duplicate values to environment variables +# using colons as separators and avoiding trailing separators +ament_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + #echo "listname $_listname" + #eval echo "list value \$$_listname" + #echo "value $_value" + + # check if the list contains the value + eval _values=\"\$$_listname\" + _duplicate= + _ament_prepend_unique_value_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array _values + fi + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + if [ "$_item" = "$_value" ]; then + _duplicate=1 + fi + done + unset _item + + # prepend only non-duplicates + if [ -z "$_duplicate" ]; then + # avoid trailing separator + if [ -z "$_values" ]; then + eval export $_listname=\"$_value\" + #eval echo "set list \$$_listname" + else + # field separator must not be a colon + unset IFS + eval export $_listname=\"$_value:\$$_listname\" + #eval echo "prepend list \$$_listname" + fi + fi + IFS=$_ament_prepend_unique_value_IFS + unset _ament_prepend_unique_value_IFS + unset _duplicate + unset _values + + unset _value + unset _listname +} + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# list all environment hooks of this package +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_go/environment/ament_prefix_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_go/environment/library_path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_go/environment/path.sh" +ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/unitree_go/environment/pythonpath.sh" + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + if [ "$AMENT_SHELL" = "zsh" ]; then + ament_zsh_to_array AMENT_ENVIRONMENT_HOOKS + fi + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + if [ -f "$_hook" ]; then + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + # trace output + if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_hook\"" + fi + . "$_hook" + fi + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +# reset AMENT_CURRENT_PREFIX after each package +# allowing to source multiple package-level setup files +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.zsh b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.zsh new file mode 100644 index 0000000..fe161be --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/local_setup.zsh @@ -0,0 +1,59 @@ +# generated from ament_package/template/package_level/local_setup.zsh.in + +AMENT_SHELL=zsh + +# source local_setup.sh from same directory as this file +_this_path=$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd) +# provide AMENT_CURRENT_PREFIX to shell script +AMENT_CURRENT_PREFIX=$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd) +# store AMENT_CURRENT_PREFIX to restore it before each environment hook +_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX + +# function to convert array-like strings into arrays +# to wordaround SH_WORD_SPLIT not being set +ament_zsh_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# trace output +if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then + echo "# . \"$_this_path/local_setup.sh\"" +fi +# the package-level local_setup file unsets AMENT_CURRENT_PREFIX +. "$_this_path/local_setup.sh" +unset _this_path + +# unset AMENT_ENVIRONMENT_HOOKS +# if not appending to them for return +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + unset AMENT_ENVIRONMENT_HOOKS +fi + +# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks +AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX +# list all environment hooks of this package + +# source all shell-specific environment hooks of this package +# if not returning them +if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then + _package_local_setup_IFS=$IFS + IFS=":" + for _hook in $AMENT_ENVIRONMENT_HOOKS; do + # restore AMENT_CURRENT_PREFIX for each environment hook + AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX + # restore IFS before sourcing other files + IFS=$_package_local_setup_IFS + . "$_hook" + done + unset _hook + IFS=$_package_local_setup_IFS + unset _package_local_setup_IFS + unset AMENT_ENVIRONMENT_HOOKS +fi + +unset _package_local_setup_AMENT_CURRENT_PREFIX +unset AMENT_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.idl new file mode 100644 index 0000000..31c88ae --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.idl @@ -0,0 +1,14 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/AudioData.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct AudioData { + uint64 time_frame; + + sequence data; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.msg new file mode 100644 index 0000000..6e889bc --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/AudioData.msg @@ -0,0 +1,2 @@ +uint64 time_frame +uint8[] data \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.idl new file mode 100644 index 0000000..c14a380 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.idl @@ -0,0 +1,15 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/BmsCmd.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef uint8 uint8__3[3]; + struct BmsCmd { + uint8 off; + + uint8__3 reserve; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.msg new file mode 100644 index 0000000..bdbf9c3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsCmd.msg @@ -0,0 +1,2 @@ +uint8 off +uint8[3] reserve \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.idl new file mode 100644 index 0000000..ccb75b5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.idl @@ -0,0 +1,30 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/BmsState.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef int8 int8__2[2]; + typedef uint16 uint16__15[15]; + struct BmsState { + uint8 version_high; + + uint8 version_low; + + uint8 status; + + uint8 soc; + + int32 current; + + uint16 cycle; + + int8__2 bq_ntc; + + int8__2 mcu_ntc; + + uint16__15 cell_vol; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.msg new file mode 100644 index 0000000..052e4d5 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/BmsState.msg @@ -0,0 +1,9 @@ +uint8 version_high +uint8 version_low +uint8 status +uint8 soc +int32 current +uint16 cycle +int8[2] bq_ntc +int8[2] mcu_ntc +uint16[15] cell_vol \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.idl new file mode 100644 index 0000000..f732ed8 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.idl @@ -0,0 +1,14 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/Error.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct Error { + uint32 source; + + uint32 state; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.msg new file mode 100644 index 0000000..4a5a631 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Error.msg @@ -0,0 +1,2 @@ +uint32 source +uint32 state \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.idl new file mode 100644 index 0000000..9377c7b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.idl @@ -0,0 +1,18 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/Go2FrontVideoData.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct Go2FrontVideoData { + uint64 time_frame; + + sequence video720p; + + sequence video360p; + + sequence video180p; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.msg new file mode 100644 index 0000000..3c294f3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Go2FrontVideoData.msg @@ -0,0 +1,4 @@ +uint64 time_frame +uint8[] video720p +uint8[] video360p +uint8[] video180p \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.idl new file mode 100644 index 0000000..016e9a3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.idl @@ -0,0 +1,49 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/HeightMap.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef float float__2[2]; + @verbatim (language="comment", text= + " Header") + struct HeightMap { + @verbatim (language="comment", text= + " timestamp") + double stamp; + + @verbatim (language="comment", text= + " world frame id") + string frame_id; + + @verbatim (language="comment", text= + " Map info" "\n" + " The map resolution") + @unit (value="m/cell") + float resolution; + + @verbatim (language="comment", text= + " Map width along x-axis") + @unit (value="cells") + uint32 width; + + @verbatim (language="comment", text= + " Map height alonge y-axis") + @unit (value="cells") + uint32 height; + + @verbatim (language="comment", text= + " Map frame origin xy-position, the xyz-axis direction of map frame is aligned with the world frame") + @unit (value="m") + float__2 origin; + + @verbatim (language="comment", text= + " Map data, in x-major order, starting with [0,0], ending with [width, height]" "\n" + " For a cell whose 2d-array-index is [ix, iy]," "\n" + " its position in world frame is: [ix * resolution + origin[0], iy * resolution + origin[1]]" "\n" + " its cell value is: data[width * iy + ix]") + sequence data; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.msg new file mode 100644 index 0000000..4e6f3b2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/HeightMap.msg @@ -0,0 +1,15 @@ +# Header +float64 stamp # timestamp +string frame_id # world frame id + +# Map info +float32 resolution # The map resolution [m/cell] +uint32 width # Map width along x-axis [cells] +uint32 height # Map height alonge y-axis [cells] +float32[2] origin # Map frame origin xy-position [m], the xyz-axis direction of map frame is aligned with the world frame + +# Map data, in x-major order, starting with [0,0], ending with [width, height] +# For a cell whose 2d-array-index is [ix, iy], +# its position in world frame is: [ix * resolution + origin[0], iy * resolution + origin[1]] +# its cell value is: data[width * iy + ix] +float32[] data \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.idl new file mode 100644 index 0000000..b9004f9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.idl @@ -0,0 +1,22 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/IMUState.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef float float__4[4]; + typedef float float__3[3]; + struct IMUState { + float__4 quaternion; + + float__3 gyroscope; + + float__3 accelerometer; + + float__3 rpy; + + int8 temperature; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.msg new file mode 100644 index 0000000..e065d04 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/IMUState.msg @@ -0,0 +1,5 @@ +float32[4] quaternion +float32[3] gyroscope +float32[3] accelerometer +float32[3] rpy +int8 temperature diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.idl new file mode 100644 index 0000000..acdbd97 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.idl @@ -0,0 +1,17 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/InterfaceConfig.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef uint8 uint8__2[2]; + struct InterfaceConfig { + uint8 mode; + + uint8 value; + + uint8__2 reserve; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.msg new file mode 100644 index 0000000..c43bd20 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/InterfaceConfig.msg @@ -0,0 +1,3 @@ +uint8 mode +uint8 value +uint8[2] reserve \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.idl new file mode 100644 index 0000000..e81c1ff --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.idl @@ -0,0 +1,45 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/LidarState.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef float float__3[3]; + struct LidarState { + double stamp; + + string firmware_version; + + string software_version; + + string sdk_version; + + float sys_rotation_speed; + + float com_rotation_speed; + + uint8 error_state; + + float cloud_frequency; + + float cloud_packet_loss_rate; + + uint32 cloud_size; + + uint32 cloud_scan_num; + + float imu_frequency; + + float imu_packet_loss_rate; + + float__3 imu_rpy; + + double serial_recv_stamp; + + uint32 serial_buffer_size; + + uint32 serial_buffer_read; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.msg new file mode 100644 index 0000000..d8b4eb2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LidarState.msg @@ -0,0 +1,17 @@ +float64 stamp +string firmware_version +string software_version +string sdk_version +float32 sys_rotation_speed +float32 com_rotation_speed +uint8 error_state +float32 cloud_frequency +float32 cloud_packet_loss_rate +uint32 cloud_size +uint32 cloud_scan_num +float32 imu_frequency +float32 imu_packet_loss_rate +float32[3] imu_rpy +float64 serial_recv_stamp +uint32 serial_buffer_size +uint32 serial_buffer_read diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.idl new file mode 100644 index 0000000..82d46a4 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.idl @@ -0,0 +1,46 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/LowCmd.msg +// generated code does not contain a copyright notice + +#include "unitree_go/msg/BmsCmd.idl" +#include "unitree_go/msg/MotorCmd.idl" + +module unitree_go { + module msg { + typedef uint8 uint8__2[2]; + typedef uint32 uint32__2[2]; + typedef unitree_go::msg::MotorCmd unitree_go__msg__MotorCmd; + typedef unitree_go__msg__MotorCmd unitree_go__msg__MotorCmd__20[20]; + typedef uint8 uint8__40[40]; + typedef uint8 uint8__12[12]; + struct LowCmd { + uint8__2 head; + + uint8 level_flag; + + uint8 frame_reserve; + + uint32__2 sn; + + uint32__2 version; + + uint16 bandwidth; + + unitree_go__msg__MotorCmd__20 motor_cmd; + + unitree_go::msg::BmsCmd bms_cmd; + + uint8__40 wireless_remote; + + uint8__12 led; + + uint8__2 fan; + + uint8 gpio; + + uint32 reserve; + + uint32 crc; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.msg new file mode 100644 index 0000000..464a31d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowCmd.msg @@ -0,0 +1,15 @@ +uint8[2] head +uint8 level_flag +uint8 frame_reserve +uint32[2] sn +uint32[2] version +uint16 bandwidth +MotorCmd[20] motor_cmd +BmsCmd bms_cmd +uint8[40] wireless_remote +uint8[12] led +uint8[2] fan +uint8 gpio +uint32 reserve +uint32 crc + diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.idl new file mode 100644 index 0000000..65e99d3 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.idl @@ -0,0 +1,64 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/LowState.msg +// generated code does not contain a copyright notice + +#include "unitree_go/msg/BmsState.idl" +#include "unitree_go/msg/IMUState.idl" +#include "unitree_go/msg/MotorState.idl" + +module unitree_go { + module msg { + typedef uint8 uint8__2[2]; + typedef uint32 uint32__2[2]; + typedef unitree_go::msg::MotorState unitree_go__msg__MotorState; + typedef unitree_go__msg__MotorState unitree_go__msg__MotorState__20[20]; + typedef int16 int16__4[4]; + typedef uint8 uint8__40[40]; + typedef uint16 uint16__4[4]; + struct LowState { + uint8__2 head; + + uint8 level_flag; + + uint8 frame_reserve; + + uint32__2 sn; + + uint32__2 version; + + uint16 bandwidth; + + unitree_go::msg::IMUState imu_state; + + unitree_go__msg__MotorState__20 motor_state; + + unitree_go::msg::BmsState bms_state; + + int16__4 foot_force; + + int16__4 foot_force_est; + + uint32 tick; + + uint8__40 wireless_remote; + + uint8 bit_flag; + + float adc_reel; + + int8 temperature_ntc1; + + int8 temperature_ntc2; + + float power_v; + + float power_a; + + uint16__4 fan_frequency; + + uint32 reserve; + + uint32 crc; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.msg new file mode 100644 index 0000000..ceaed32 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/LowState.msg @@ -0,0 +1,22 @@ +uint8[2] head +uint8 level_flag +uint8 frame_reserve +uint32[2] sn +uint32[2] version +uint16 bandwidth +IMUState imu_state +MotorState[20] motor_state +BmsState bms_state +int16[4] foot_force +int16[4] foot_force_est +uint32 tick +uint8[40] wireless_remote +uint8 bit_flag +float32 adc_reel +int8 temperature_ntc1 +int8 temperature_ntc2 +float32 power_v +float32 power_a +uint16[4] fan_frequency +uint32 reserve +uint32 crc \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.idl new file mode 100644 index 0000000..8f698ff --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.idl @@ -0,0 +1,25 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/MotorCmd.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef uint32 uint32__3[3]; + struct MotorCmd { + uint8 mode; + + float q; + + float dq; + + float tau; + + float kp; + + float kd; + + uint32__3 reserve; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.msg new file mode 100644 index 0000000..67cd1bf --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorCmd.msg @@ -0,0 +1,7 @@ +uint8 mode +float32 q +float32 dq +float32 tau +float32 kp +float32 kd +uint32[3] reserve \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.idl new file mode 100644 index 0000000..653ebc6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.idl @@ -0,0 +1,33 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/MotorState.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef uint32 uint32__2[2]; + struct MotorState { + uint8 mode; + + float q; + + float dq; + + float ddq; + + float tau_est; + + float q_raw; + + float dq_raw; + + float ddq_raw; + + int8 temperature; + + uint32 lost; + + uint32__2 reserve; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.msg new file mode 100644 index 0000000..2e1a739 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/MotorState.msg @@ -0,0 +1,11 @@ +uint8 mode +float32 q +float32 dq +float32 ddq +float32 tau_est +float32 q_raw +float32 dq_raw +float32 ddq_raw +int8 temperature +uint32 lost +uint32[2] reserve \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.idl new file mode 100644 index 0000000..7e6e29f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.idl @@ -0,0 +1,24 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/PathPoint.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct PathPoint { + float t_from_start; + + float x; + + float y; + + float yaw; + + float vx; + + float vy; + + float vyaw; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.msg new file mode 100644 index 0000000..08b4945 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/PathPoint.msg @@ -0,0 +1,7 @@ +float32 t_from_start +float32 x +float32 y +float32 yaw +float32 vx +float32 vy +float32 vyaw \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.idl new file mode 100644 index 0000000..ebbc611 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.idl @@ -0,0 +1,14 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/Req.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct Req { + string uuid; + + string body; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.msg new file mode 100644 index 0000000..af14a7d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Req.msg @@ -0,0 +1,2 @@ +string uuid +string body \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.idl new file mode 100644 index 0000000..8d91e1c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.idl @@ -0,0 +1,16 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/Res.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct Res { + string uuid; + + sequence data; + + string body; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.msg new file mode 100644 index 0000000..8070258 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/Res.msg @@ -0,0 +1,3 @@ +string uuid +uint8[] data +string body \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.idl new file mode 100644 index 0000000..4b81956 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.idl @@ -0,0 +1,38 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/SportModeCmd.msg +// generated code does not contain a copyright notice + +#include "unitree_go/msg/BmsCmd.idl" +#include "unitree_go/msg/PathPoint.idl" + +module unitree_go { + module msg { + typedef float float__2[2]; + typedef float float__3[3]; + typedef unitree_go::msg::PathPoint unitree_go__msg__PathPoint; + typedef unitree_go__msg__PathPoint unitree_go__msg__PathPoint__30[30]; + struct SportModeCmd { + uint8 mode; + + uint8 gait_type; + + uint8 speed_level; + + float foot_raise_height; + + float body_height; + + float__2 position; + + float__3 euler; + + float__2 velocity; + + float yaw_speed; + + unitree_go::msg::BmsCmd bms_cmd; + + unitree_go__msg__PathPoint__30 path_point; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.msg new file mode 100644 index 0000000..e5ccb46 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeCmd.msg @@ -0,0 +1,13 @@ +uint8 mode +uint8 gait_type +uint8 speed_level +float32 foot_raise_height +float32 body_height +float32[2] position +float32[3] euler +float32[2] velocity +float32 yaw_speed +BmsCmd bms_cmd +PathPoint[30] path_point + + diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.idl new file mode 100644 index 0000000..9b90c9c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.idl @@ -0,0 +1,46 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/SportModeState.msg +// generated code does not contain a copyright notice + +#include "unitree_go/msg/IMUState.idl" +#include "unitree_go/msg/TimeSpec.idl" + +module unitree_go { + module msg { + typedef float float__3[3]; + typedef float float__4[4]; + typedef int16 int16__4[4]; + typedef float float__12[12]; + struct SportModeState { + unitree_go::msg::TimeSpec stamp; + + uint32 error_code; + + unitree_go::msg::IMUState imu_state; + + uint8 mode; + + float progress; + + uint8 gait_type; + + float foot_raise_height; + + float__3 position; + + float body_height; + + float__3 velocity; + + float yaw_speed; + + float__4 range_obstacle; + + int16__4 foot_force; + + float__12 foot_position_body; + + float__12 foot_speed_body; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.msg new file mode 100644 index 0000000..7a6c1e6 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/SportModeState.msg @@ -0,0 +1,17 @@ +TimeSpec stamp +uint32 error_code +IMUState imu_state +uint8 mode +float32 progress +uint8 gait_type +float32 foot_raise_height +float32[3] position +float32 body_height +float32[3] velocity +float32 yaw_speed +float32[4] range_obstacle +int16[4] foot_force +float32[12] foot_position_body +float32[12] foot_speed_body + + diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.idl new file mode 100644 index 0000000..5d4c972 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.idl @@ -0,0 +1,19 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/TimeSpec.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + @verbatim (language="comment", text= + " Time indicates a specific point in time, relative to a clock's 0 point." "\n" + " The seconds component, valid over all int32 values.") + struct TimeSpec { + int32 sec; + + @verbatim (language="comment", text= + " The nanoseconds component, valid in the range [0, 10e9).") + uint32 nanosec; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.msg new file mode 100644 index 0000000..188b3c1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/TimeSpec.msg @@ -0,0 +1,5 @@ +# Time indicates a specific point in time, relative to a clock's 0 point. +# The seconds component, valid over all int32 values. +int32 sec +# The nanoseconds component, valid in the range [0, 10e9). +uint32 nanosec diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.idl new file mode 100644 index 0000000..e32c0c0 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.idl @@ -0,0 +1,46 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/UwbState.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + typedef uint8 uint8__2[2]; + typedef float float__2[2]; + struct UwbState { + uint8__2 version; + + uint8 channel; + + uint8 joy_mode; + + float orientation_est; + + float pitch_est; + + float distance_est; + + float yaw_est; + + float tag_roll; + + float tag_pitch; + + float tag_yaw; + + float base_roll; + + float base_pitch; + + float base_yaw; + + float__2 joystick; + + uint8 error_state; + + uint8 buttons; + + uint8 enabled_from_app; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.msg new file mode 100644 index 0000000..ed1da3a --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbState.msg @@ -0,0 +1,19 @@ +uint8[2] version +uint8 channel +uint8 joy_mode +float32 orientation_est +float32 pitch_est +float32 distance_est +float32 yaw_est +float32 tag_roll +float32 tag_pitch +float32 tag_yaw +float32 base_roll +float32 base_pitch +float32 base_yaw +float32[2] joystick +uint8 error_state +uint8 buttons +uint8 enabled_from_app + + diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.idl new file mode 100644 index 0000000..815c2d9 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.idl @@ -0,0 +1,12 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/UwbSwitch.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct UwbSwitch { + uint8 enabled; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.msg new file mode 100644 index 0000000..db8ec91 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/UwbSwitch.msg @@ -0,0 +1 @@ +uint8 enabled \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.idl new file mode 100644 index 0000000..4cfbe6c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.idl @@ -0,0 +1,20 @@ +// generated from rosidl_adapter/resource/msg.idl.em +// with input from unitree_go/msg/WirelessController.msg +// generated code does not contain a copyright notice + + +module unitree_go { + module msg { + struct WirelessController { + float lx; + + float ly; + + float rx; + + float ry; + + uint16 keys; + }; + }; +}; diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.msg b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.msg new file mode 100644 index 0000000..12965ff --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/WirelessController.msg @@ -0,0 +1,5 @@ +float32 lx +float32 ly +float32 rx +float32 ry +uint16 keys \ No newline at end of file diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/AudioData_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/AudioData_.idl new file mode 100644 index 0000000..d2ab5ec --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/AudioData_.idl @@ -0,0 +1,31 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/AudioData.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__audio_data__idl__ +#define __unitree_go__msg__audio_data__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct AudioData_ { +unsigned long long time_frame_; +sequence data_; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__audio_data__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsCmd_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsCmd_.idl new file mode 100644 index 0000000..10c312e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsCmd_.idl @@ -0,0 +1,31 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/BmsCmd.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__bms_cmd__idl__ +#define __unitree_go__msg__bms_cmd__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct BmsCmd_ { +octet off_; +octet reserve_[3]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__bms_cmd__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsState_.idl new file mode 100644 index 0000000..b68a6a2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/BmsState_.idl @@ -0,0 +1,40 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/BmsState.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__bms_state__idl__ +#define __unitree_go__msg__bms_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct BmsState_ { +octet version_high_; +octet version_low_; +octet status_; +octet soc_; +long current_; +unsigned short cycle_; +octet bq_ntc_[2]; + +octet mcu_ntc_[2]; + +unsigned short cell_vol_[15]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__bms_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Error_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Error_.idl new file mode 100644 index 0000000..813785b --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Error_.idl @@ -0,0 +1,30 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/Error.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__error__idl__ +#define __unitree_go__msg__error__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct Error_ { +unsigned long source_; +unsigned long state_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__error__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Go2FrontVideoData_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Go2FrontVideoData_.idl new file mode 100644 index 0000000..fae906d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Go2FrontVideoData_.idl @@ -0,0 +1,35 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/Go2FrontVideoData.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__go2_front_video_data__idl__ +#define __unitree_go__msg__go2_front_video_data__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct Go2FrontVideoData_ { +unsigned long long time_frame_; +sequence video720p_; + +sequence video360p_; + +sequence video180p_; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__go2_front_video_data__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/HeightMap_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/HeightMap_.idl new file mode 100644 index 0000000..793833f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/HeightMap_.idl @@ -0,0 +1,37 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/HeightMap.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__height_map__idl__ +#define __unitree_go__msg__height_map__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct HeightMap_ { +double stamp_; +string frame_id_; +float resolution_; +unsigned long width_; +unsigned long height_; +float origin_[2]; + +sequence data_; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__height_map__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/IMUState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/IMUState_.idl new file mode 100644 index 0000000..5728487 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/IMUState_.idl @@ -0,0 +1,37 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/IMUState.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__imu_state__idl__ +#define __unitree_go__msg__imu_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct IMUState_ { +float quaternion_[4]; + +float gyroscope_[3]; + +float accelerometer_[3]; + +float rpy_[3]; + +octet temperature_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__imu_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/InterfaceConfig_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/InterfaceConfig_.idl new file mode 100644 index 0000000..1644752 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/InterfaceConfig_.idl @@ -0,0 +1,32 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/InterfaceConfig.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__interface_config__idl__ +#define __unitree_go__msg__interface_config__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct InterfaceConfig_ { +octet mode_; +octet value_; +octet reserve_[2]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__interface_config__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LidarState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LidarState_.idl new file mode 100644 index 0000000..6ae1481 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LidarState_.idl @@ -0,0 +1,46 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/LidarState.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__lidar_state__idl__ +#define __unitree_go__msg__lidar_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct LidarState_ { +double stamp_; +string firmware_version_; +string software_version_; +string sdk_version_; +float sys_rotation_speed_; +float com_rotation_speed_; +octet error_state_; +float cloud_frequency_; +float cloud_packet_loss_rate_; +unsigned long cloud_size_; +unsigned long cloud_scan_num_; +float imu_frequency_; +float imu_packet_loss_rate_; +float imu_rpy_[3]; + +double serial_recv_stamp_; +unsigned long serial_buffer_size_; +unsigned long serial_buffer_read_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__lidar_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowCmd_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowCmd_.idl new file mode 100644 index 0000000..935655d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowCmd_.idl @@ -0,0 +1,51 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/LowCmd.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/dds_connext/BmsCmd_.idl" +#include "unitree_go/msg/dds_connext/MotorCmd_.idl" + +#ifndef __unitree_go__msg__low_cmd__idl__ +#define __unitree_go__msg__low_cmd__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct LowCmd_ { +octet head_[2]; + +octet level_flag_; +octet frame_reserve_; +unsigned long sn_[2]; + +unsigned long version_[2]; + +unsigned short bandwidth_; +unitree_go::msg::dds_::MotorCmd_ motor_cmd_[20]; + +unitree_go::msg::dds_::BmsCmd_ bms_cmd_; +octet wireless_remote_[40]; + +octet led_[12]; + +octet fan_[2]; + +octet gpio_; +unsigned long reserve_; +unsigned long crc_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__low_cmd__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowState_.idl new file mode 100644 index 0000000..e07295c --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/LowState_.idl @@ -0,0 +1,61 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/LowState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/dds_connext/BmsState_.idl" +#include "unitree_go/msg/dds_connext/IMUState_.idl" +#include "unitree_go/msg/dds_connext/MotorState_.idl" + +#ifndef __unitree_go__msg__low_state__idl__ +#define __unitree_go__msg__low_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct LowState_ { +octet head_[2]; + +octet level_flag_; +octet frame_reserve_; +unsigned long sn_[2]; + +unsigned long version_[2]; + +unsigned short bandwidth_; +unitree_go::msg::dds_::IMUState_ imu_state_; +unitree_go::msg::dds_::MotorState_ motor_state_[20]; + +unitree_go::msg::dds_::BmsState_ bms_state_; +short foot_force_[4]; + +short foot_force_est_[4]; + +unsigned long tick_; +octet wireless_remote_[40]; + +octet bit_flag_; +float adc_reel_; +octet temperature_ntc1_; +octet temperature_ntc2_; +float power_v_; +float power_a_; +unsigned short fan_frequency_[4]; + +unsigned long reserve_; +unsigned long crc_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__low_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorCmd_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorCmd_.idl new file mode 100644 index 0000000..acbd929 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorCmd_.idl @@ -0,0 +1,36 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/MotorCmd.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__motor_cmd__idl__ +#define __unitree_go__msg__motor_cmd__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct MotorCmd_ { +octet mode_; +float q_; +float dq_; +float tau_; +float kp_; +float kd_; +unsigned long reserve_[3]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__motor_cmd__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorState_.idl new file mode 100644 index 0000000..0766406 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/MotorState_.idl @@ -0,0 +1,40 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/MotorState.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__motor_state__idl__ +#define __unitree_go__msg__motor_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct MotorState_ { +octet mode_; +float q_; +float dq_; +float ddq_; +float tau_est_; +float q_raw_; +float dq_raw_; +float ddq_raw_; +octet temperature_; +unsigned long lost_; +unsigned long reserve_[2]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__motor_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/PathPoint_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/PathPoint_.idl new file mode 100644 index 0000000..a85bac7 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/PathPoint_.idl @@ -0,0 +1,35 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/PathPoint.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__path_point__idl__ +#define __unitree_go__msg__path_point__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct PathPoint_ { +float t_from_start_; +float x_; +float y_; +float yaw_; +float vx_; +float vy_; +float vyaw_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__path_point__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Req_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Req_.idl new file mode 100644 index 0000000..10bbcaa --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Req_.idl @@ -0,0 +1,30 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/Req.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__req__idl__ +#define __unitree_go__msg__req__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct Req_ { +string uuid_; +string body_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__req__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Res_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Res_.idl new file mode 100644 index 0000000..6bd68ce --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/Res_.idl @@ -0,0 +1,32 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/Res.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__res__idl__ +#define __unitree_go__msg__res__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct Res_ { +string uuid_; +sequence data_; + +string body_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__res__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeCmd_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeCmd_.idl new file mode 100644 index 0000000..d52c30d --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeCmd_.idl @@ -0,0 +1,45 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/SportModeCmd.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/dds_connext/BmsCmd_.idl" +#include "unitree_go/msg/dds_connext/PathPoint_.idl" + +#ifndef __unitree_go__msg__sport_mode_cmd__idl__ +#define __unitree_go__msg__sport_mode_cmd__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct SportModeCmd_ { +octet mode_; +octet gait_type_; +octet speed_level_; +float foot_raise_height_; +float body_height_; +float position_[2]; + +float euler_[3]; + +float velocity_[2]; + +float yaw_speed_; +unitree_go::msg::dds_::BmsCmd_ bms_cmd_; +unitree_go::msg::dds_::PathPoint_ path_point_[30]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__sport_mode_cmd__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeState_.idl new file mode 100644 index 0000000..e746045 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/SportModeState_.idl @@ -0,0 +1,51 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/SportModeState.idl +// generated code does not contain a copyright notice +#include "unitree_go/msg/dds_connext/IMUState_.idl" +#include "unitree_go/msg/dds_connext/TimeSpec_.idl" + +#ifndef __unitree_go__msg__sport_mode_state__idl__ +#define __unitree_go__msg__sport_mode_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct SportModeState_ { +unitree_go::msg::dds_::TimeSpec_ stamp_; +unsigned long error_code_; +unitree_go::msg::dds_::IMUState_ imu_state_; +octet mode_; +float progress_; +octet gait_type_; +float foot_raise_height_; +float position_[3]; + +float body_height_; +float velocity_[3]; + +float yaw_speed_; +float range_obstacle_[4]; + +short foot_force_[4]; + +float foot_position_body_[12]; + +float foot_speed_body_[12]; + + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__sport_mode_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/TimeSpec_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/TimeSpec_.idl new file mode 100644 index 0000000..d0278a1 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/TimeSpec_.idl @@ -0,0 +1,30 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/TimeSpec.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__time_spec__idl__ +#define __unitree_go__msg__time_spec__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct TimeSpec_ { +long sec_; +unsigned long nanosec_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__time_spec__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbState_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbState_.idl new file mode 100644 index 0000000..5b77fed --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbState_.idl @@ -0,0 +1,47 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/UwbState.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__uwb_state__idl__ +#define __unitree_go__msg__uwb_state__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct UwbState_ { +octet version_[2]; + +octet channel_; +octet joy_mode_; +float orientation_est_; +float pitch_est_; +float distance_est_; +float yaw_est_; +float tag_roll_; +float tag_pitch_; +float tag_yaw_; +float base_roll_; +float base_pitch_; +float base_yaw_; +float joystick_[2]; + +octet error_state_; +octet buttons_; +octet enabled_from_app_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__uwb_state__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbSwitch_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbSwitch_.idl new file mode 100644 index 0000000..29e8f20 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/UwbSwitch_.idl @@ -0,0 +1,29 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/UwbSwitch.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__uwb_switch__idl__ +#define __unitree_go__msg__uwb_switch__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct UwbSwitch_ { +octet enabled_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__uwb_switch__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/WirelessController_.idl b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/WirelessController_.idl new file mode 100644 index 0000000..f7ae454 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/msg/dds_connext/WirelessController_.idl @@ -0,0 +1,33 @@ +// generated from rosidl_generator_dds_idl/resource/idl.idl.em +// with input from unitree_go:msg/WirelessController.idl +// generated code does not contain a copyright notice + +#ifndef __unitree_go__msg__wireless_controller__idl__ +#define __unitree_go__msg__wireless_controller__idl__ + + +module unitree_go { + +module msg { + +module dds_ { + + +struct WirelessController_ { +float lx_; +float ly_; +float rx_; +float ry_; +unsigned short keys_; + +}; + + +}; // module dds_ + +}; // module msg + +}; // module unitree_go + + +#endif // __unitree_go__msg__wireless_controller__idl__ diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/package.bash b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.bash new file mode 100644 index 0000000..0d83431 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.bash @@ -0,0 +1,39 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/unitree_go/package.sh" + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX" + +# source bash hooks +_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/unitree_go/local_setup.bash" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/package.dsv b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.dsv new file mode 100644 index 0000000..43ce51e --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.dsv @@ -0,0 +1,14 @@ +source;share/unitree_go/hook/cmake_prefix_path.ps1 +source;share/unitree_go/hook/cmake_prefix_path.dsv +source;share/unitree_go/hook/cmake_prefix_path.sh +source;share/unitree_go/hook/ld_library_path_lib.ps1 +source;share/unitree_go/hook/ld_library_path_lib.dsv +source;share/unitree_go/hook/ld_library_path_lib.sh +source;share/unitree_go/hook/pythonpath.ps1 +source;share/unitree_go/hook/pythonpath.dsv +source;share/unitree_go/hook/pythonpath.sh +source;share/unitree_go/local_setup.bash +source;share/unitree_go/local_setup.dsv +source;share/unitree_go/local_setup.ps1 +source;share/unitree_go/local_setup.sh +source;share/unitree_go/local_setup.zsh diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/package.ps1 b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.ps1 new file mode 100644 index 0000000..5d026e2 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.ps1 @@ -0,0 +1,118 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to append a value to a variable +# which uses colons as separators +# duplicates as well as leading separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_append_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + $_duplicate="" + # start with no values + $_all_values="" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -eq $_value) { + $_duplicate="1" + } + if ($_all_values) { + $_all_values="${_all_values};$_" + } else { + $_all_values="$_" + } + } + } + } + # append only non-duplicates + if (!$_duplicate) { + # avoid leading separator + if ($_all_values) { + $_all_values="${_all_values};${_value}" + } else { + $_all_values="${_value}" + } + } + + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_go/hook/cmake_prefix_path.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_go/hook/ld_library_path_lib.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_go/hook/pythonpath.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/unitree_go/local_setup.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/package.sh b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.sh new file mode 100644 index 0000000..0d5f19f --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.sh @@ -0,0 +1,89 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/unitree/locomotion/Go2Py/deploy/ros2_ws/install/unitree_go" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_go/hook/cmake_prefix_path.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_go/hook/ld_library_path_lib.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_go/hook/pythonpath.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_go/local_setup.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/package.xml b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.xml new file mode 100644 index 0000000..1a26d14 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.xml @@ -0,0 +1,23 @@ + + + + unitree_go + 0.0.0 + TODO: Package description + czk + TODO: License declaration + + rosidl_default_generators + rosidl_default_runtime + rosidl_interface_packages + ament_cmake + + geometry_msgs + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/deploy/robot_ws/install/unitree_go/share/unitree_go/package.zsh b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.zsh new file mode 100644 index 0000000..e8c5370 --- /dev/null +++ b/deploy/robot_ws/install/unitree_go/share/unitree_go/package.zsh @@ -0,0 +1,50 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/unitree_go/package.sh" +unset convert_zsh_to_array + +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts +COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX" + +# source zsh hooks +_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/unitree_go/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/deploy/robot_ws/log/COLCON_IGNORE b/deploy/robot_ws/log/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/deploy/robot_ws/log/latest b/deploy/robot_ws/log/latest new file mode 120000 index 0000000..b57d247 --- /dev/null +++ b/deploy/robot_ws/log/latest @@ -0,0 +1 @@ +latest_build \ No newline at end of file diff --git a/deploy/robot_ws/log/latest_build b/deploy/robot_ws/log/latest_build new file mode 120000 index 0000000..06a8618 --- /dev/null +++ b/deploy/robot_ws/log/latest_build @@ -0,0 +1 @@ +build_2024-02-09_01-44-22 \ No newline at end of file diff --git a/deploy/robot_ws/src/go2py_node/CMakeLists.txt b/deploy/robot_ws/src/go2py_node/CMakeLists.txt new file mode 100644 index 0000000..4c4b588 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/CMakeLists.txt @@ -0,0 +1,74 @@ +cmake_minimum_required(VERSION 3.5) +project(go2py_node) + +# Default to C99 +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 99) +endif() + +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + + +include_directories(include include/common include/nlohmann) +link_directories(src) + +set ( + DEPENDENCY_LIST + unitree_go + unitree_api + rclcpp + std_msgs + rosbag2_cpp + sensor_msgs + geometry_msgs + nav_msgs + tf2 + tf2_geometry_msgs + tf2_ros + tf2_sensor_msgs +) + +# find dependencies +find_package(ament_cmake REQUIRED) +find_package(unitree_go REQUIRED) +find_package(unitree_go REQUIRED) +find_package(unitree_api REQUIRED) +find_package(rclcpp REQUIRED) +find_package(std_msgs REQUIRED) +find_package(rosbag2_cpp REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(nav_msgs REQUIRED) +find_package(tf2 REQUIRED) +find_package(tf2_geometry_msgs REQUIRED) +find_package(tf2_ros REQUIRED) +find_package(tf2_sensor_msgs REQUIRED) + +add_executable(bridge src/bridge.cpp src/common/ros2_sport_client.cpp src/common/motor_crc.cpp) +ament_target_dependencies(bridge ${DEPENDENCY_LIST}) + + +install(TARGETS + bridge + DESTINATION lib/${PROJECT_NAME}) + + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + # the following line skips the linter which checks for copyrights + # uncomment the line when a copyright and license is not present in all source files + #set(ament_cmake_copyright_FOUND TRUE) + # the following line skips cpplint (only works in a git repo) + # uncomment the line when this package is not in a git repo + #set(ament_cmake_cpplint_FOUND TRUE) + ament_lint_auto_find_test_dependencies() +endif() + +ament_package() diff --git a/deploy/robot_ws/src/go2py_node/include/common/motor_crc.h b/deploy/robot_ws/src/go2py_node/include/common/motor_crc.h new file mode 100644 index 0000000..c7a5c29 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/common/motor_crc.h @@ -0,0 +1,87 @@ +/***************************************************************** + Copyright (c) 2020, Unitree Robotics.Co.Ltd. All rights reserved. +******************************************************************/ + +#ifndef _MOTOR_CRC_H_ +#define _MOTOR_CRC_H_ + +#include +#include +#include "rclcpp/rclcpp.hpp" +#include "unitree_go/msg/low_cmd.hpp" +#include "unitree_go/msg/motor_cmd.hpp" +#include "unitree_go/msg/bms_cmd.hpp" + +constexpr int HIGHLEVEL = 0xee; +constexpr int LOWLEVEL = 0xff; +constexpr int TRIGERLEVEL = 0xf0; +constexpr double PosStopF = (2.146E+9f); +constexpr double VelStopF = (16000.0f); + +// joint index +constexpr int FR_0 = 0; +constexpr int FR_1 = 1; +constexpr int FR_2 = 2; + +constexpr int FL_0 = 3; +constexpr int FL_1 = 4; +constexpr int FL_2 = 5; + +constexpr int RR_0 = 6; +constexpr int RR_1 = 7; +constexpr int RR_2 = 8; + +constexpr int RL_0 = 9; +constexpr int RL_1 = 10; +constexpr int RL_2 = 11; + + +typedef struct +{ + uint8_t off; // off 0xA5 + std::array reserve; +} BmsCmd; + + + +typedef struct +{ + uint8_t mode; // desired working mode + float q; // desired angle (unit: radian) + float dq; // desired velocity (unit: radian/second) + float tau; // desired output torque (unit: N.m) + float Kp; // desired position stiffness (unit: N.m/rad ) + float Kd; // desired velocity stiffness (unit: N.m/(rad/s) ) + std::array reserve; +} MotorCmd; // motor control + + + +typedef struct +{ + std::array head; + uint8_t levelFlag; + uint8_t frameReserve; + + std::array SN; + std::array version; + uint16_t bandWidth; + std::array motorCmd; + BmsCmd bms; + std::array wirelessRemote; + std::array led; + std::array fan; + uint8_t gpio; + uint32_t reserve; + + uint32_t crc; +} LowCmd; + +uint32_t crc32_core(uint32_t* ptr, uint32_t len); +void get_crc(unitree_go::msg::LowCmd& msg); + + + + + +#endif \ No newline at end of file diff --git a/deploy/robot_ws/src/go2py_node/include/common/ros2_sport_client.h b/deploy/robot_ws/src/go2py_node/include/common/ros2_sport_client.h new file mode 100644 index 0000000..c137e16 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/common/ros2_sport_client.h @@ -0,0 +1,231 @@ +#ifndef _ROS2_SPORT_CLIENT_ +#define _ROS2_SPORT_CLIENT_ +#include +#include "nlohmann/json.hpp" +#include "unitree_api/msg/request.hpp" + + +#pragma pack(1) +const int32_t ROBOT_SPORT_API_ID_DAMP = 1001; +const int32_t ROBOT_SPORT_API_ID_BALANCESTAND = 1002; +const int32_t ROBOT_SPORT_API_ID_STOPMOVE = 1003; +const int32_t ROBOT_SPORT_API_ID_STANDUP = 1004; +const int32_t ROBOT_SPORT_API_ID_STANDDOWN = 1005; +const int32_t ROBOT_SPORT_API_ID_RECOVERYSTAND = 1006; +const int32_t ROBOT_SPORT_API_ID_EULER = 1007; +const int32_t ROBOT_SPORT_API_ID_MOVE = 1008; +const int32_t ROBOT_SPORT_API_ID_SIT = 1009; +const int32_t ROBOT_SPORT_API_ID_RISESIT = 1010; +const int32_t ROBOT_SPORT_API_ID_SWITCHGAIT = 1011; +const int32_t ROBOT_SPORT_API_ID_TRIGGER = 1012; +const int32_t ROBOT_SPORT_API_ID_BODYHEIGHT = 1013; +const int32_t ROBOT_SPORT_API_ID_FOOTRAISEHEIGHT = 1014; +const int32_t ROBOT_SPORT_API_ID_SPEEDLEVEL = 1015; +const int32_t ROBOT_SPORT_API_ID_HELLO = 1016; +const int32_t ROBOT_SPORT_API_ID_STRETCH = 1017; +const int32_t ROBOT_SPORT_API_ID_TRAJECTORYFOLLOW = 1018; +const int32_t ROBOT_SPORT_API_ID_CONTINUOUSGAIT = 1019; +const int32_t ROBOT_SPORT_API_ID_CONTENT = 1020; +const int32_t ROBOT_SPORT_API_ID_WALLOW = 1021; +const int32_t ROBOT_SPORT_API_ID_DANCE1 = 1022; +const int32_t ROBOT_SPORT_API_ID_DANCE2 = 1023; +const int32_t ROBOT_SPORT_API_ID_GETBODYHEIGHT = 1024; +const int32_t ROBOT_SPORT_API_ID_GETFOOTRAISEHEIGHT = 1025; +const int32_t ROBOT_SPORT_API_ID_GETSPEEDLEVEL = 1026; +const int32_t ROBOT_SPORT_API_ID_SWITCHJOYSTICK = 1027; +const int32_t ROBOT_SPORT_API_ID_POSE = 1028; +const int32_t ROBOT_SPORT_API_ID_SCRAPE = 1029; +const int32_t ROBOT_SPORT_API_ID_FRONTFLIP = 1030; +const int32_t ROBOT_SPORT_API_ID_FRONTJUMP = 1031; +const int32_t ROBOT_SPORT_API_ID_FRONTPOUNCE = 1032; + +typedef struct +{ + float timeFromStart; + float x; + float y; + float yaw; + float vx; + float vy; + float vyaw; +} PathPoint; + +class SportClient +{ +public: + /* + * @brief Damp + * @api: 1001 + */ + void Damp(unitree_api::msg::Request &req); + + /* + * @brief BalanceStand + * @api: 1002 + */ + void BalanceStand(unitree_api::msg::Request &req); + + /* + * @brief StopMove + * @api: 1003 + */ + void StopMove(unitree_api::msg::Request &req); + + /* + * @brief StandUp + * @api: 1004 + */ + void StandUp(unitree_api::msg::Request &req); + + /* + * @brief StandDown + * @api: 1005 + */ + void StandDown(unitree_api::msg::Request &req); + + /* + * @brief RecoveryStand + * @api: 1006 + */ + void RecoveryStand(unitree_api::msg::Request &req); + + /* + * @brief Euler + * @api: 1007 + */ + void Euler(unitree_api::msg::Request &req, float roll, float pitch, float yaw); + + /* + * @brief Move + * @api: 1008 + */ + void Move(unitree_api::msg::Request &req, float vx, float vy, float vyaw); + + /* + * @brief Sit + * @api: 1009 + */ + void Sit(unitree_api::msg::Request &req); + + /* + * @brief RiseSit + * @api: 1010 + */ + void RiseSit(unitree_api::msg::Request &req); + + /* + * @brief SwitchGait + * @api: 1011 + */ + void SwitchGait(unitree_api::msg::Request &req, int d); + + /* + * @brief Trigger + * @api: 1012 + */ + void Trigger(unitree_api::msg::Request &req); + + /* + * @brief BodyHeight + * @api: 1013 + */ + void BodyHeight(unitree_api::msg::Request &req, float height); + + /* + * @brief FootRaiseHeight + * @api: 1014 + */ + void FootRaiseHeight(unitree_api::msg::Request &req, float height); + + /* + * @brief SpeedLevel + * @api: 1015 + */ + void SpeedLevel(unitree_api::msg::Request &req, int level); + + /* + * @brief Hello + * @api: 1016 + */ + void Hello(unitree_api::msg::Request &req); + + /* + * @brief Stretch + * @api: 1017 + */ + void Stretch(unitree_api::msg::Request &req); + + /* + * @brief TrajectoryFollow + * @api: 1018 + */ + void TrajectoryFollow(unitree_api::msg::Request &req, std::vector &path); + + /* + * @brief SwitchJoystick + * @api: 1027 + */ + void SwitchJoystick(unitree_api::msg::Request &req, bool flag); + + /* + * @brief ContinuousGait + * @api: 1019 + */ + void ContinuousGait(unitree_api::msg::Request &req, bool flag); + + /* + * @brief Wallow + * @api: 1021 + */ + void Wallow(unitree_api::msg::Request &req); + + /* + * @brief Content + * @api: 1020 + */ + void Content(unitree_api::msg::Request &req); + + /* + * @brief Pose + * @api: 1028 + */ + void Pose(unitree_api::msg::Request &req, bool flag); + + /* + * @brief Scrape + * @api: 1029 + */ + void Scrape(unitree_api::msg::Request &req); + + /* + * @brief FrontFlip + * @api: 1030 + */ + void FrontFlip(unitree_api::msg::Request &req); + + /* + * @brief FrontJump + * @api: 1031 + */ + void FrontJump(unitree_api::msg::Request &req); + + /* + * @brief FrontPounce + * @api: 1032 + */ + void FrontPounce(unitree_api::msg::Request &req); + + /* + * @brief Dance1 + * @api: 1022 + */ + void Dance1(unitree_api::msg::Request &req); + + /* + * @brief Dance2 + * @api: 1023 + */ + void Dance2(unitree_api::msg::Request &req); +}; + +#endif \ No newline at end of file diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/adl_serializer.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/adl_serializer.hpp new file mode 100644 index 0000000..f77f944 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/adl_serializer.hpp @@ -0,0 +1,55 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @sa https://json.nlohmann.me/api/adl_serializer/ +template +struct adl_serializer +{ + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j, TargetType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), val))) + -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + { + ::nlohmann::from_json(std::forward(j), val); + } + + /// @brief convert a JSON value to any value type + /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/ + template + static auto from_json(BasicJsonType && j) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) + -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) + { + return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); + } + + /// @brief convert any value type to a JSON value + /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/ + template + static auto to_json(BasicJsonType& j, TargetType && val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward(val)))) + -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) + { + ::nlohmann::to_json(j, std::forward(val)); + } +}; + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/byte_container_with_subtype.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/byte_container_with_subtype.hpp new file mode 100644 index 0000000..1031cdc --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/byte_container_with_subtype.hpp @@ -0,0 +1,103 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // uint8_t, uint64_t +#include // tie +#include // move + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @brief an internal type for a backed binary type +/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/ +template +class byte_container_with_subtype : public BinaryType +{ + public: + using container_type = BinaryType; + using subtype_type = std::uint64_t; + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/ + byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /// @brief sets the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/ + void set_subtype(subtype_type subtype_) noexcept + { + m_subtype = subtype_; + m_has_subtype = true; + } + + /// @brief return the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/ + constexpr subtype_type subtype() const noexcept + { + return m_has_subtype ? m_subtype : static_cast(-1); + } + + /// @brief return whether the value has a subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /// @brief clears the binary subtype + /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + subtype_type m_subtype = 0; + bool m_has_subtype = false; +}; + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/abi_macros.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/abi_macros.hpp new file mode 100644 index 0000000..0d3108d --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/abi_macros.hpp @@ -0,0 +1,100 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 2 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 2 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/from_json.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/from_json.hpp new file mode 100644 index 0000000..c6299aa --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/from_json.hpp @@ -0,0 +1,497 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +#include +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, concat("type must be null, but is ", j.type_name()), &j)); + } + n = nullptr; +} + +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic::value&& + !std::is_same::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); + } +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, concat("type must be boolean, but is ", j.type_name()), &j)); + } + b = *j.template get_ptr(); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + s = *j.template get_ptr(); +} + +template < + typename BasicJsonType, typename StringType, + enable_if_t < + std::is_assignable::value + && is_detected_exact::value + && !std::is_same::value + && !is_json_ref::value, int > = 0 > +inline void from_json(const BasicJsonType& j, StringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + + s = *j.template get_ptr(); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} + +#if !JSON_DISABLE_ENUM_SERIALIZATION +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type::type val; + get_arithmetic_value(j, val); + e = static_cast(val); +} +#endif // JSON_DISABLE_ENUM_SERIALIZATION + +// forward_list doesn't have an insert method +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, std::forward_list& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get(); + }); +} + +// valarray doesn't have an insert method +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, std::valarray& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get(); + }); +} + +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template +inline void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr(); +} + +template +auto from_json_array_impl(const BasicJsonType& j, std::array& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template::value, + int> = 0> +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval()), + j.template get(), + void()) +{ + using std::end; + + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template::value, + int> = 0> +inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; + + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type::value&& + !is_constructible_object_type::value&& + !is_constructible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + from_json_array_impl(j, arr, priority_tag<3> {}); +} + +template < typename BasicJsonType, typename T, std::size_t... Idx > +std::array from_json_inplace_array_impl(BasicJsonType&& j, + identity_tag> /*unused*/, index_sequence /*unused*/) +{ + return { { std::forward(j).at(Idx).template get()... } }; +} + +template < typename BasicJsonType, typename T, std::size_t N > +auto from_json(BasicJsonType&& j, identity_tag> tag) +-> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); +} + +template +inline void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, concat("type must be binary, but is ", j.type_name()), &j)); + } + + bin = *j.template get_ptr(); +} + +template::value, int> = 0> +inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, concat("type must be object, but is ", j.type_name()), &j)); + } + + ConstructibleObjectType ret; + const auto* inner_object = j.template get_ptr(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get()); + }); + obj = std::move(ret); +} + +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value, + int > = 0 > +inline void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::boolean: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, concat("type must be number, but is ", j.type_name()), &j)); + } +} + +template +std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) +{ + return std::make_tuple(std::forward(j).at(Idx).template get()...); +} + +template < typename BasicJsonType, class A1, class A2 > +std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) +{ + return {std::forward(j).at(0).template get(), + std::forward(j).at(1).template get()}; +} + +template +inline void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) +{ + p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); +} + +template +std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) +{ + return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +inline void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) +{ + t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +auto from_json(BasicJsonType&& j, TupleRelated&& t) +-> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + + return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); +} + +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +inline void from_json(const BasicJsonType& j, std::map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +inline void from_json(const BasicJsonType& j, std::unordered_map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", j.type_name()), &j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, concat("type must be array, but is ", p.type_name()), &j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +inline void from_json(const BasicJsonType& j, std_fs::path& p) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, concat("type must be string, but is ", j.type_name()), &j)); + } + p = *j.template get_ptr(); +} +#endif + +struct from_json_fn +{ + template + auto operator()(const BasicJsonType& j, T&& val) const + noexcept(noexcept(from_json(j, std::forward(val)))) + -> decltype(from_json(j, std::forward(val))) + { + return from_json(j, std::forward(val)); + } +}; + +} // namespace detail + +#ifndef JSON_HAS_CPP_17 +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +#endif +JSON_INLINE_VARIABLE constexpr const auto& from_json = // NOLINT(misc-definitions-in-headers) + detail::static_const::value; +#ifndef JSON_HAS_CPP_17 +} // namespace +#endif + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_chars.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_chars.hpp new file mode 100644 index 0000000..2d0914d --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_chars.hpp @@ -0,0 +1,1118 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2009 Florian Loitsch +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // signbit, isfinite +#include // intN_t, uintN_t +#include // memcpy, memmove +#include // numeric_limits +#include // conditional + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief implements the Grisu2 algorithm for binary to decimal floating-point +conversion. + +This implementation is a slightly modified version of the reference +implementation which may be obtained from +http://florian.loitsch.com/publications (bench.tar.gz). + +The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. + +For a detailed description of the algorithm see: + +[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with + Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming + Language Design and Implementation, PLDI 2010 +[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", + Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language + Design and Implementation, PLDI 1996 +*/ +namespace dtoa_impl +{ + +template +Target reinterpret_bits(const Source source) +{ + static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); + + Target target; + std::memcpy(&target, &source, sizeof(Source)); + return target; +} + +struct diyfp // f * 2^e +{ + static constexpr int kPrecision = 64; // = q + + std::uint64_t f = 0; + int e = 0; + + constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} + + /*! + @brief returns x - y + @pre x.e == y.e and x.f >= y.f + */ + static diyfp sub(const diyfp& x, const diyfp& y) noexcept + { + JSON_ASSERT(x.e == y.e); + JSON_ASSERT(x.f >= y.f); + + return {x.f - y.f, x.e}; + } + + /*! + @brief returns x * y + @note The result is rounded. (Only the upper q bits are returned.) + */ + static diyfp mul(const diyfp& x, const diyfp& y) noexcept + { + static_assert(kPrecision == 64, "internal error"); + + // Computes: + // f = round((x.f * y.f) / 2^q) + // e = x.e + y.e + q + + // Emulate the 64-bit * 64-bit multiplication: + // + // p = u * v + // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) + // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) + // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) + // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) + // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) + // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) + // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) + // + // (Since Q might be larger than 2^32 - 1) + // + // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) + // + // (Q_hi + H does not overflow a 64-bit int) + // + // = p_lo + 2^64 p_hi + + const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; + const std::uint64_t u_hi = x.f >> 32u; + const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; + const std::uint64_t v_hi = y.f >> 32u; + + const std::uint64_t p0 = u_lo * v_lo; + const std::uint64_t p1 = u_lo * v_hi; + const std::uint64_t p2 = u_hi * v_lo; + const std::uint64_t p3 = u_hi * v_hi; + + const std::uint64_t p0_hi = p0 >> 32u; + const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; + const std::uint64_t p1_hi = p1 >> 32u; + const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; + const std::uint64_t p2_hi = p2 >> 32u; + + std::uint64_t Q = p0_hi + p1_lo + p2_lo; + + // The full product might now be computed as + // + // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) + // p_lo = p0_lo + (Q << 32) + // + // But in this particular case here, the full p_lo is not required. + // Effectively we only need to add the highest bit in p_lo to p_hi (and + // Q_hi + 1 does not overflow). + + Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up + + const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); + + return {h, x.e + y.e + 64}; + } + + /*! + @brief normalize x such that the significand is >= 2^(q-1) + @pre x.f != 0 + */ + static diyfp normalize(diyfp x) noexcept + { + JSON_ASSERT(x.f != 0); + + while ((x.f >> 63u) == 0) + { + x.f <<= 1u; + x.e--; + } + + return x; + } + + /*! + @brief normalize x such that the result has the exponent E + @pre e >= x.e and the upper e - x.e bits of x.f must be zero. + */ + static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept + { + const int delta = x.e - target_exponent; + + JSON_ASSERT(delta >= 0); + JSON_ASSERT(((x.f << delta) >> delta) == x.f); + + return {x.f << delta, target_exponent}; + } +}; + +struct boundaries +{ + diyfp w; + diyfp minus; + diyfp plus; +}; + +/*! +Compute the (normalized) diyfp representing the input number 'value' and its +boundaries. + +@pre value must be finite and positive +*/ +template +boundaries compute_boundaries(FloatType value) +{ + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // Convert the IEEE representation into a diyfp. + // + // If v is denormal: + // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) + // If v is normalized: + // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) + + static_assert(std::numeric_limits::is_iec559, + "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); + + constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) + constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); + constexpr int kMinExp = 1 - kBias; + constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) + + using bits_type = typename std::conditional::type; + + const auto bits = static_cast(reinterpret_bits(value)); + const std::uint64_t E = bits >> (kPrecision - 1); + const std::uint64_t F = bits & (kHiddenBit - 1); + + const bool is_denormal = E == 0; + const diyfp v = is_denormal + ? diyfp(F, kMinExp) + : diyfp(F + kHiddenBit, static_cast(E) - kBias); + + // Compute the boundaries m- and m+ of the floating-point value + // v = f * 2^e. + // + // Determine v- and v+, the floating-point predecessor and successor if v, + // respectively. + // + // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) + // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) + // + // v+ = v + 2^e + // + // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ + // between m- and m+ round to v, regardless of how the input rounding + // algorithm breaks ties. + // + // ---+-------------+-------------+-------------+-------------+--- (A) + // v- m- v m+ v+ + // + // -----------------+------+------+-------------+-------------+--- (B) + // v- m- v m+ v+ + + const bool lower_boundary_is_closer = F == 0 && E > 1; + const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); + const diyfp m_minus = lower_boundary_is_closer + ? diyfp(4 * v.f - 1, v.e - 2) // (B) + : diyfp(2 * v.f - 1, v.e - 1); // (A) + + // Determine the normalized w+ = m+. + const diyfp w_plus = diyfp::normalize(m_plus); + + // Determine w- = m- such that e_(w-) = e_(w+). + const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); + + return {diyfp::normalize(v), w_minus, w_plus}; +} + +// Given normalized diyfp w, Grisu needs to find a (normalized) cached +// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies +// within a certain range [alpha, gamma] (Definition 3.2 from [1]) +// +// alpha <= e = e_c + e_w + q <= gamma +// +// or +// +// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q +// <= f_c * f_w * 2^gamma +// +// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies +// +// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma +// +// or +// +// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) +// +// The choice of (alpha,gamma) determines the size of the table and the form of +// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well +// in practice: +// +// The idea is to cut the number c * w = f * 2^e into two parts, which can be +// processed independently: An integral part p1, and a fractional part p2: +// +// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e +// = (f div 2^-e) + (f mod 2^-e) * 2^e +// = p1 + p2 * 2^e +// +// The conversion of p1 into decimal form requires a series of divisions and +// modulos by (a power of) 10. These operations are faster for 32-bit than for +// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be +// achieved by choosing +// +// -e >= 32 or e <= -32 := gamma +// +// In order to convert the fractional part +// +// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... +// +// into decimal form, the fraction is repeatedly multiplied by 10 and the digits +// d[-i] are extracted in order: +// +// (10 * p2) div 2^-e = d[-1] +// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... +// +// The multiplication by 10 must not overflow. It is sufficient to choose +// +// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. +// +// Since p2 = f mod 2^-e < 2^-e, +// +// -e <= 60 or e >= -60 := alpha + +constexpr int kAlpha = -60; +constexpr int kGamma = -32; + +struct cached_power // c = f * 2^e ~= 10^k +{ + std::uint64_t f; + int e; + int k; +}; + +/*! +For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached +power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c +satisfies (Definition 3.2 from [1]) + + alpha <= e_c + e + q <= gamma. +*/ +inline cached_power get_cached_power_for_binary_exponent(int e) +{ + // Now + // + // alpha <= e_c + e + q <= gamma (1) + // ==> f_c * 2^alpha <= c * 2^e * 2^q + // + // and since the c's are normalized, 2^(q-1) <= f_c, + // + // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) + // ==> 2^(alpha - e - 1) <= c + // + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as + // + // k = ceil( log_10( 2^(alpha - e - 1) ) ) + // = ceil( (alpha - e - 1) * log_10(2) ) + // + // From the paper: + // "In theory the result of the procedure could be wrong since c is rounded, + // and the computation itself is approximated [...]. In practice, however, + // this simple function is sufficient." + // + // For IEEE double precision floating-point numbers converted into + // normalized diyfp's w = f * 2^e, with q = 64, + // + // e >= -1022 (min IEEE exponent) + // -52 (p - 1) + // -52 (p - 1, possibly normalize denormal IEEE numbers) + // -11 (normalize the diyfp) + // = -1137 + // + // and + // + // e <= +1023 (max IEEE exponent) + // -52 (p - 1) + // -11 (normalize the diyfp) + // = 960 + // + // This binary exponent range [-1137,960] results in a decimal exponent + // range [-307,324]. One does not need to store a cached power for each + // k in this range. For each such k it suffices to find a cached power + // such that the exponent of the product lies in [alpha,gamma]. + // This implies that the difference of the decimal exponents of adjacent + // table entries must be less than or equal to + // + // floor( (gamma - alpha) * log_10(2) ) = 8. + // + // (A smaller distance gamma-alpha would require a larger table.) + + // NB: + // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. + + constexpr int kCachedPowersMinDecExp = -300; + constexpr int kCachedPowersDecStep = 8; + + static constexpr std::array kCachedPowers = + { + { + { 0xAB70FE17C79AC6CA, -1060, -300 }, + { 0xFF77B1FCBEBCDC4F, -1034, -292 }, + { 0xBE5691EF416BD60C, -1007, -284 }, + { 0x8DD01FAD907FFC3C, -980, -276 }, + { 0xD3515C2831559A83, -954, -268 }, + { 0x9D71AC8FADA6C9B5, -927, -260 }, + { 0xEA9C227723EE8BCB, -901, -252 }, + { 0xAECC49914078536D, -874, -244 }, + { 0x823C12795DB6CE57, -847, -236 }, + { 0xC21094364DFB5637, -821, -228 }, + { 0x9096EA6F3848984F, -794, -220 }, + { 0xD77485CB25823AC7, -768, -212 }, + { 0xA086CFCD97BF97F4, -741, -204 }, + { 0xEF340A98172AACE5, -715, -196 }, + { 0xB23867FB2A35B28E, -688, -188 }, + { 0x84C8D4DFD2C63F3B, -661, -180 }, + { 0xC5DD44271AD3CDBA, -635, -172 }, + { 0x936B9FCEBB25C996, -608, -164 }, + { 0xDBAC6C247D62A584, -582, -156 }, + { 0xA3AB66580D5FDAF6, -555, -148 }, + { 0xF3E2F893DEC3F126, -529, -140 }, + { 0xB5B5ADA8AAFF80B8, -502, -132 }, + { 0x87625F056C7C4A8B, -475, -124 }, + { 0xC9BCFF6034C13053, -449, -116 }, + { 0x964E858C91BA2655, -422, -108 }, + { 0xDFF9772470297EBD, -396, -100 }, + { 0xA6DFBD9FB8E5B88F, -369, -92 }, + { 0xF8A95FCF88747D94, -343, -84 }, + { 0xB94470938FA89BCF, -316, -76 }, + { 0x8A08F0F8BF0F156B, -289, -68 }, + { 0xCDB02555653131B6, -263, -60 }, + { 0x993FE2C6D07B7FAC, -236, -52 }, + { 0xE45C10C42A2B3B06, -210, -44 }, + { 0xAA242499697392D3, -183, -36 }, + { 0xFD87B5F28300CA0E, -157, -28 }, + { 0xBCE5086492111AEB, -130, -20 }, + { 0x8CBCCC096F5088CC, -103, -12 }, + { 0xD1B71758E219652C, -77, -4 }, + { 0x9C40000000000000, -50, 4 }, + { 0xE8D4A51000000000, -24, 12 }, + { 0xAD78EBC5AC620000, 3, 20 }, + { 0x813F3978F8940984, 30, 28 }, + { 0xC097CE7BC90715B3, 56, 36 }, + { 0x8F7E32CE7BEA5C70, 83, 44 }, + { 0xD5D238A4ABE98068, 109, 52 }, + { 0x9F4F2726179A2245, 136, 60 }, + { 0xED63A231D4C4FB27, 162, 68 }, + { 0xB0DE65388CC8ADA8, 189, 76 }, + { 0x83C7088E1AAB65DB, 216, 84 }, + { 0xC45D1DF942711D9A, 242, 92 }, + { 0x924D692CA61BE758, 269, 100 }, + { 0xDA01EE641A708DEA, 295, 108 }, + { 0xA26DA3999AEF774A, 322, 116 }, + { 0xF209787BB47D6B85, 348, 124 }, + { 0xB454E4A179DD1877, 375, 132 }, + { 0x865B86925B9BC5C2, 402, 140 }, + { 0xC83553C5C8965D3D, 428, 148 }, + { 0x952AB45CFA97A0B3, 455, 156 }, + { 0xDE469FBD99A05FE3, 481, 164 }, + { 0xA59BC234DB398C25, 508, 172 }, + { 0xF6C69A72A3989F5C, 534, 180 }, + { 0xB7DCBF5354E9BECE, 561, 188 }, + { 0x88FCF317F22241E2, 588, 196 }, + { 0xCC20CE9BD35C78A5, 614, 204 }, + { 0x98165AF37B2153DF, 641, 212 }, + { 0xE2A0B5DC971F303A, 667, 220 }, + { 0xA8D9D1535CE3B396, 694, 228 }, + { 0xFB9B7CD9A4A7443C, 720, 236 }, + { 0xBB764C4CA7A44410, 747, 244 }, + { 0x8BAB8EEFB6409C1A, 774, 252 }, + { 0xD01FEF10A657842C, 800, 260 }, + { 0x9B10A4E5E9913129, 827, 268 }, + { 0xE7109BFBA19C0C9D, 853, 276 }, + { 0xAC2820D9623BF429, 880, 284 }, + { 0x80444B5E7AA7CF85, 907, 292 }, + { 0xBF21E44003ACDD2D, 933, 300 }, + { 0x8E679C2F5E44FF8F, 960, 308 }, + { 0xD433179D9C8CB841, 986, 316 }, + { 0x9E19DB92B4E31BA9, 1013, 324 }, + } + }; + + // This computation gives exactly the same results for k as + // k = ceil((kAlpha - e - 1) * 0.30102999566398114) + // for |e| <= 1500, but doesn't require floating-point operations. + // NB: log_10(2) ~= 78913 / 2^18 + JSON_ASSERT(e >= -1500); + JSON_ASSERT(e <= 1500); + const int f = kAlpha - e - 1; + const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); + + const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; + JSON_ASSERT(index >= 0); + JSON_ASSERT(static_cast(index) < kCachedPowers.size()); + + const cached_power cached = kCachedPowers[static_cast(index)]; + JSON_ASSERT(kAlpha <= cached.e + e + 64); + JSON_ASSERT(kGamma >= cached.e + e + 64); + + return cached; +} + +/*! +For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. +For n == 0, returns 1 and sets pow10 := 1. +*/ +inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) +{ + // LCOV_EXCL_START + if (n >= 1000000000) + { + pow10 = 1000000000; + return 10; + } + // LCOV_EXCL_STOP + if (n >= 100000000) + { + pow10 = 100000000; + return 9; + } + if (n >= 10000000) + { + pow10 = 10000000; + return 8; + } + if (n >= 1000000) + { + pow10 = 1000000; + return 7; + } + if (n >= 100000) + { + pow10 = 100000; + return 6; + } + if (n >= 10000) + { + pow10 = 10000; + return 5; + } + if (n >= 1000) + { + pow10 = 1000; + return 4; + } + if (n >= 100) + { + pow10 = 100; + return 3; + } + if (n >= 10) + { + pow10 = 10; + return 2; + } + + pow10 = 1; + return 1; +} + +inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, + std::uint64_t rest, std::uint64_t ten_k) +{ + JSON_ASSERT(len >= 1); + JSON_ASSERT(dist <= delta); + JSON_ASSERT(rest <= delta); + JSON_ASSERT(ten_k > 0); + + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // ten_k + // <------> + // <---- rest ----> + // --------------[------------------+----+--------------]-------------- + // w V + // = buf * 10^k + // + // ten_k represents a unit-in-the-last-place in the decimal representation + // stored in buf. + // Decrement buf by ten_k while this takes buf closer to w. + + // The tests are written in this order to avoid overflow in unsigned + // integer arithmetic. + + while (rest < dist + && delta - rest >= ten_k + && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) + { + JSON_ASSERT(buf[len - 1] != '0'); + buf[len - 1]--; + rest += ten_k; + } +} + +/*! +Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. +M- and M+ must be normalized and share the same exponent -60 <= e <= -32. +*/ +inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, + diyfp M_minus, diyfp w, diyfp M_plus) +{ + static_assert(kAlpha >= -60, "internal error"); + static_assert(kGamma <= -32, "internal error"); + + // Generates the digits (and the exponent) of a decimal floating-point + // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's + // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. + // + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // Grisu2 generates the digits of M+ from left to right and stops as soon as + // V is in [M-,M+]. + + JSON_ASSERT(M_plus.e >= kAlpha); + JSON_ASSERT(M_plus.e <= kGamma); + + std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) + std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) + + // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): + // + // M+ = f * 2^e + // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e + // = ((p1 ) * 2^-e + (p2 )) * 2^e + // = p1 + p2 * 2^e + + const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); + + auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) + std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e + + // 1) + // + // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] + + JSON_ASSERT(p1 > 0); + + std::uint32_t pow10{}; + const int k = find_largest_pow10(p1, pow10); + + // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) + // + // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) + // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) + // + // M+ = p1 + p2 * 2^e + // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e + // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e + // = d[k-1] * 10^(k-1) + ( rest) * 2^e + // + // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) + // + // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] + // + // but stop as soon as + // + // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e + + int n = k; + while (n > 0) + { + // Invariants: + // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) + // pow10 = 10^(n-1) <= p1 < 10^n + // + const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) + const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) + // + // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e + // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) + // + p1 = r; + n--; + // + // M+ = buffer * 10^n + (p1 + p2 * 2^e) + // pow10 = 10^n + // + + // Now check if enough digits have been generated. + // Compute + // + // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e + // + // Note: + // Since rest and delta share the same exponent e, it suffices to + // compare the significands. + const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; + if (rest <= delta) + { + // V = buffer * 10^n, with M- <= V <= M+. + + decimal_exponent += n; + + // We may now just stop. But instead look if the buffer could be + // decremented to bring V closer to w. + // + // pow10 = 10^n is now 1 ulp in the decimal representation V. + // The rounding procedure works with diyfp's with an implicit + // exponent of e. + // + // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e + // + const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; + grisu2_round(buffer, length, dist, delta, rest, ten_n); + + return; + } + + pow10 /= 10; + // + // pow10 = 10^(n-1) <= p1 < 10^n + // Invariants restored. + } + + // 2) + // + // The digits of the integral part have been generated: + // + // M+ = d[k-1]...d[1]d[0] + p2 * 2^e + // = buffer + p2 * 2^e + // + // Now generate the digits of the fractional part p2 * 2^e. + // + // Note: + // No decimal point is generated: the exponent is adjusted instead. + // + // p2 actually represents the fraction + // + // p2 * 2^e + // = p2 / 2^-e + // = d[-1] / 10^1 + d[-2] / 10^2 + ... + // + // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) + // + // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m + // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) + // + // using + // + // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) + // = ( d) * 2^-e + ( r) + // + // or + // 10^m * p2 * 2^e = d + r * 2^e + // + // i.e. + // + // M+ = buffer + p2 * 2^e + // = buffer + 10^-m * (d + r * 2^e) + // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e + // + // and stop as soon as 10^-m * r * 2^e <= delta * 2^e + + JSON_ASSERT(p2 > delta); + + int m = 0; + for (;;) + { + // Invariant: + // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e + // = buffer * 10^-m + 10^-m * (p2 ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e + // + JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); + p2 *= 10; + const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e + const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e + // + // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) + // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + p2 = r; + m++; + // + // M+ = buffer * 10^-m + 10^-m * p2 * 2^e + // Invariant restored. + + // Check if enough digits have been generated. + // + // 10^-m * p2 * 2^e <= delta * 2^e + // p2 * 2^e <= 10^m * delta * 2^e + // p2 <= 10^m * delta + delta *= 10; + dist *= 10; + if (p2 <= delta) + { + break; + } + } + + // V = buffer * 10^-m, with M- <= V <= M+. + + decimal_exponent -= m; + + // 1 ulp in the decimal representation is now 10^-m. + // Since delta and dist are now scaled by 10^m, we need to do the + // same with ulp in order to keep the units in sync. + // + // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e + // + const std::uint64_t ten_m = one.f; + grisu2_round(buffer, length, dist, delta, p2, ten_m); + + // By construction this algorithm generates the shortest possible decimal + // number (Loitsch, Theorem 6.2) which rounds back to w. + // For an input number of precision p, at least + // + // N = 1 + ceil(p * log_10(2)) + // + // decimal digits are sufficient to identify all binary floating-point + // numbers (Matula, "In-and-Out conversions"). + // This implies that the algorithm does not produce more than N decimal + // digits. + // + // N = 17 for p = 53 (IEEE double precision) + // N = 9 for p = 24 (IEEE single precision) +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +JSON_HEDLEY_NON_NULL(1) +inline void grisu2(char* buf, int& len, int& decimal_exponent, + diyfp m_minus, diyfp v, diyfp m_plus) +{ + JSON_ASSERT(m_plus.e == m_minus.e); + JSON_ASSERT(m_plus.e == v.e); + + // --------(-----------------------+-----------------------)-------- (A) + // m- v m+ + // + // --------------------(-----------+-----------------------)-------- (B) + // m- v m+ + // + // First scale v (and m- and m+) such that the exponent is in the range + // [alpha, gamma]. + + const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); + + const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k + + // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] + const diyfp w = diyfp::mul(v, c_minus_k); + const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); + const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); + + // ----(---+---)---------------(---+---)---------------(---+---)---- + // w- w w+ + // = c*m- = c*v = c*m+ + // + // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and + // w+ are now off by a small amount. + // In fact: + // + // w - v * 10^k < 1 ulp + // + // To account for this inaccuracy, add resp. subtract 1 ulp. + // + // --------+---[---------------(---+---)---------------]---+-------- + // w- M- w M+ w+ + // + // Now any number in [M-, M+] (bounds included) will round to w when input, + // regardless of how the input rounding algorithm breaks ties. + // + // And digit_gen generates the shortest possible such number in [M-, M+]. + // Note that this does not mean that Grisu2 always generates the shortest + // possible number in the interval (m-, m+). + const diyfp M_minus(w_minus.f + 1, w_minus.e); + const diyfp M_plus (w_plus.f - 1, w_plus.e ); + + decimal_exponent = -cached.k; // = -(-k) = k + + grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +template +JSON_HEDLEY_NON_NULL(1) +void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) +{ + static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, + "internal error: not enough precision"); + + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // If the neighbors (and boundaries) of 'value' are always computed for double-precision + // numbers, all float's can be recovered using strtod (and strtof). However, the resulting + // decimal representations are not exactly "short". + // + // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) + // says "value is converted to a string as if by std::sprintf in the default ("C") locale" + // and since sprintf promotes floats to doubles, I think this is exactly what 'std::to_chars' + // does. + // On the other hand, the documentation for 'std::to_chars' requires that "parsing the + // representation using the corresponding std::from_chars function recovers value exactly". That + // indicates that single precision floating-point numbers should be recovered using + // 'std::strtof'. + // + // NB: If the neighbors are computed for single-precision numbers, there is a single float + // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision + // value is off by 1 ulp. +#if 0 // NOLINT(readability-avoid-unconditional-preprocessor-if) + const boundaries w = compute_boundaries(static_cast(value)); +#else + const boundaries w = compute_boundaries(value); +#endif + + grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); +} + +/*! +@brief appends a decimal representation of e to buf +@return a pointer to the element following the exponent. +@pre -1000 < e < 1000 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* append_exponent(char* buf, int e) +{ + JSON_ASSERT(e > -1000); + JSON_ASSERT(e < 1000); + + if (e < 0) + { + e = -e; + *buf++ = '-'; + } + else + { + *buf++ = '+'; + } + + auto k = static_cast(e); + if (k < 10) + { + // Always print at least two digits in the exponent. + // This is for compatibility with printf("%g"). + *buf++ = '0'; + *buf++ = static_cast('0' + k); + } + else if (k < 100) + { + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + else + { + *buf++ = static_cast('0' + k / 100); + k %= 100; + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + + return buf; +} + +/*! +@brief prettify v = buf * 10^decimal_exponent + +If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point +notation. Otherwise it will be printed in exponential notation. + +@pre min_exp < 0 +@pre max_exp > 0 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* format_buffer(char* buf, int len, int decimal_exponent, + int min_exp, int max_exp) +{ + JSON_ASSERT(min_exp < 0); + JSON_ASSERT(max_exp > 0); + + const int k = len; + const int n = len + decimal_exponent; + + // v = buf * 10^(n-k) + // k is the length of the buffer (number of decimal digits) + // n is the position of the decimal point relative to the start of the buffer. + + if (k <= n && n <= max_exp) + { + // digits[000] + // len <= max_exp + 2 + + std::memset(buf + k, '0', static_cast(n) - static_cast(k)); + // Make it look like a floating-point number (#362, #378) + buf[n + 0] = '.'; + buf[n + 1] = '0'; + return buf + (static_cast(n) + 2); + } + + if (0 < n && n <= max_exp) + { + // dig.its + // len <= max_digits10 + 1 + + JSON_ASSERT(k > n); + + std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); + buf[n] = '.'; + return buf + (static_cast(k) + 1U); + } + + if (min_exp < n && n <= 0) + { + // 0.[000]digits + // len <= 2 + (-min_exp - 1) + max_digits10 + + std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); + buf[0] = '0'; + buf[1] = '.'; + std::memset(buf + 2, '0', static_cast(-n)); + return buf + (2U + static_cast(-n) + static_cast(k)); + } + + if (k == 1) + { + // dE+123 + // len <= 1 + 5 + + buf += 1; + } + else + { + // d.igitsE+123 + // len <= max_digits10 + 1 + 5 + + std::memmove(buf + 2, buf + 1, static_cast(k) - 1); + buf[1] = '.'; + buf += 1 + static_cast(k); + } + + *buf++ = 'e'; + return append_exponent(buf, n - 1); +} + +} // namespace dtoa_impl + +/*! +@brief generates a decimal representation of the floating-point number value in [first, last). + +The format of the resulting decimal representation is similar to printf's %g +format. Returns an iterator pointing past-the-end of the decimal representation. + +@note The input number must be finite, i.e. NaN's and Inf's are not supported. +@note The buffer must be large enough. +@note The result is NOT null-terminated. +*/ +template +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL +char* to_chars(char* first, const char* last, FloatType value) +{ + static_cast(last); // maybe unused - fix warning + JSON_ASSERT(std::isfinite(value)); + + // Use signbit(value) instead of (value < 0) since signbit works for -0. + if (std::signbit(value)) + { + value = -value; + *first++ = '-'; + } + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (value == 0) // +-0 + { + *first++ = '0'; + // Make it look like a floating-point number (#362, #378) + *first++ = '.'; + *first++ = '0'; + return first; + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); + + // Compute v = buffer * 10^decimal_exponent. + // The decimal digits are stored in the buffer, which needs to be interpreted + // as an unsigned decimal integer. + // len is the length of the buffer, i.e. the number of decimal digits. + int len = 0; + int decimal_exponent = 0; + dtoa_impl::grisu2(first, len, decimal_exponent, value); + + JSON_ASSERT(len <= std::numeric_limits::max_digits10); + + // Format the buffer like printf("%.*g", prec, value) + constexpr int kMinExp = -4; + // Use digits10 here to increase compatibility with version 2. + constexpr int kMaxExp = std::numeric_limits::digits10; + + JSON_ASSERT(last - first >= kMaxExp + 2); + JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); + + return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_json.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_json.hpp new file mode 100644 index 0000000..e70207f --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/conversions/to_json.hpp @@ -0,0 +1,446 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // copy +#include // begin, end +#include // string +#include // tuple, get +#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include // move, forward, declval, pair +#include // valarray +#include // vector + +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +////////////////// +// constructors // +////////////////// + +/* + * Note all external_constructor<>::construct functions need to call + * j.m_data.m_value.destroy(j.m_data.m_type) to avoid a memory leak in case j contains an + * allocated value (e.g., a string). See bug issue + * https://github.com/nlohmann/json/issues/2865 for more information. + */ + +template struct external_constructor; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::boolean; + j.m_data.m_value = b; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::string; + j.m_data.m_value = s; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::string; + j.m_data.m_value = std::move(s); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::string; + j.m_data.m_value.string = j.template create(str); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::binary; + j.m_data.m_value = typename BasicJsonType::binary_t(b); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::binary; + j.m_data.m_value = typename BasicJsonType::binary_t(std::move(b)); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::number_float; + j.m_data.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::number_unsigned; + j.m_data.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::number_integer; + j.m_data.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = arr; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = std::move(arr); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; + + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value.array = j.template create(begin(arr), end(arr)); + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, const std::vector& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = value_t::array; + j.m_data.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_data.m_value.array->push_back(x); + j.set_parent(j.m_data.m_value.array->back()); + } + j.assert_invariant(); + } + + template::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray& arr) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::array; + j.m_data.m_value = value_t::array; + j.m_data.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_data.m_value.array->begin()); + } + j.set_parents(); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::object; + j.m_data.m_value = obj; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) + { + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::object; + j.m_data.m_value = std::move(obj); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) + { + using std::begin; + using std::end; + + j.m_data.m_value.destroy(j.m_data.m_type); + j.m_data.m_type = value_t::object; + j.m_data.m_value.object = j.template create(begin(obj), end(obj)); + j.set_parents(); + j.assert_invariant(); + } +}; + +///////////// +// to_json // +///////////// + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, T b) noexcept +{ + external_constructor::construct(j, b); +} + +template < typename BasicJsonType, typename BoolRef, + enable_if_t < + ((std::is_same::reference, BoolRef>::value + && !std::is_same ::reference, typename BasicJsonType::boolean_t&>::value) + || (std::is_same::const_reference, BoolRef>::value + && !std::is_same ::const_reference>, + typename BasicJsonType::boolean_t >::value)) + && std::is_convertible::value, int > = 0 > +inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept +{ + external_constructor::construct(j, static_cast(b)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, const CompatibleString& s) +{ + external_constructor::construct(j, s); +} + +template +inline void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) +{ + external_constructor::construct(j, std::move(s)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, FloatType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +#if !JSON_DISABLE_ENUM_SERIALIZATION +template::value, int> = 0> +inline void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type::type; + external_constructor::construct(j, static_cast(e)); +} +#endif // JSON_DISABLE_ENUM_SERIALIZATION + +template +inline void to_json(BasicJsonType& j, const std::vector& e) +{ + external_constructor::construct(j, e); +} + +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type::value&& + !is_compatible_object_type::value&& + !is_compatible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr) +{ + external_constructor::construct(j, arr); +} + +template +inline void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor::construct(j, bin); +} + +template::value, int> = 0> +inline void to_json(BasicJsonType& j, const std::valarray& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template +inline void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > +inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor::construct(j, obj); +} + +template +inline void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor::construct(j, std::move(obj)); +} + +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int > = 0 > +inline void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + external_constructor::construct(j, arr); +} + +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +inline void to_json(BasicJsonType& j, const std::pair& p) +{ + j = { p.first, p.second }; +} + +// for https://github.com/nlohmann/json/pull/1134 +template>::value, int> = 0> +inline void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} + +template +inline void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) +{ + j = { std::get(t)... }; +} + +template::value, int > = 0> +inline void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence::value> {}); +} + +#if JSON_HAS_FILESYSTEM || JSON_HAS_EXPERIMENTAL_FILESYSTEM +template +inline void to_json(BasicJsonType& j, const std_fs::path& p) +{ + j = p.string(); +} +#endif + +struct to_json_fn +{ + template + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) + -> decltype(to_json(j, std::forward(val)), void()) + { + return to_json(j, std::forward(val)); + } +}; +} // namespace detail + +#ifndef JSON_HAS_CPP_17 +/// namespace to hold default `to_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +#endif +JSON_INLINE_VARIABLE constexpr const auto& to_json = // NOLINT(misc-definitions-in-headers) + detail::static_const::value; +#ifndef JSON_HAS_CPP_17 +} // namespace +#endif + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/exceptions.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/exceptions.hpp new file mode 100644 index 0000000..23b390c --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/exceptions.hpp @@ -0,0 +1,258 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +#include +#include +#include +#include +#include +#include +#include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +//////////////// +// exceptions // +//////////////// + +/// @brief general exception of the @ref basic_json class +/// @sa https://json.nlohmann.me/api/basic_json/exception/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + const char* what() const noexcept override + { + return m.what(); + } + + /// the id of the exception + const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing) + + static std::string name(const std::string& ename, int id_) + { + return concat("[json.exception.", ename, '.', std::to_string(id_), "] "); + } + + static std::string diagnostics(std::nullptr_t /*leaf_element*/) + { + return ""; + } + + template + static std::string diagnostics(const BasicJsonType* leaf_element) + { +#if JSON_DIAGNOSTICS + std::vector tokens; + for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent) + { + switch (current->m_parent->type()) + { + case value_t::array: + { + for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i) + { + if (¤t->m_parent->m_data.m_value.array->operator[](i) == current) + { + tokens.emplace_back(std::to_string(i)); + break; + } + } + break; + } + + case value_t::object: + { + for (const auto& element : *current->m_parent->m_data.m_value.object) + { + if (&element.second == current) + { + tokens.emplace_back(element.first.c_str()); + break; + } + } + break; + } + + case value_t::null: // LCOV_EXCL_LINE + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + } + + if (tokens.empty()) + { + return ""; + } + + auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, + [](const std::string & a, const std::string & b) + { + return concat(a, '/', detail::escape(b)); + }); + return concat('(', str, ") "); +#else + static_cast(leaf_element); + return ""; +#endif + } + + private: + /// an exception object as storage for error messages + std::runtime_error m; +}; + +/// @brief exception indicating a parse error +/// @sa https://json.nlohmann.me/api/basic_json/parse_error/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + template::value, int> = 0> + static parse_error create(int id_, const position_t& pos, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("parse_error", id_), "parse error", + position_string(pos), ": ", exception::diagnostics(context), what_arg); + return {id_, pos.chars_read_total, w.c_str()}; + } + + template::value, int> = 0> + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("parse_error", id_), "parse error", + (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""), + ": ", exception::diagnostics(context), what_arg); + return {id_, byte_, w.c_str()}; + } + + /*! + @brief byte index of the parse error + + The byte index of the last read character in the input file. + + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; + + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + + static std::string position_string(const position_t& pos) + { + return concat(" at line ", std::to_string(pos.lines_read + 1), + ", column ", std::to_string(pos.chars_read_current_line)); + } +}; + +/// @brief exception indicating errors with iterators +/// @sa https://json.nlohmann.me/api/basic_json/invalid_iterator/ +class invalid_iterator : public exception +{ + public: + template::value, int> = 0> + static invalid_iterator create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("invalid_iterator", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; + +/// @brief exception indicating executing a member function with a wrong type +/// @sa https://json.nlohmann.me/api/basic_json/type_error/ +class type_error : public exception +{ + public: + template::value, int> = 0> + static type_error create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating access out of the defined range +/// @sa https://json.nlohmann.me/api/basic_json/out_of_range/ +class out_of_range : public exception +{ + public: + template::value, int> = 0> + static out_of_range create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/// @brief exception indicating other library errors +/// @sa https://json.nlohmann.me/api/basic_json/other_error/ +class other_error : public exception +{ + public: + template::value, int> = 0> + static other_error create(int id_, const std::string& what_arg, BasicJsonContext context) + { + const std::string w = concat(exception::name("other_error", id_), exception::diagnostics(context), what_arg); + return {id_, w.c_str()}; + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/hash.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/hash.hpp new file mode 100644 index 0000000..3f05af8 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/hash.hpp @@ -0,0 +1,129 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // uint8_t +#include // size_t +#include // hash + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} + +/*! +@brief hash a JSON value + +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. + +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template +std::size_t hash(const BasicJsonType& j) +{ + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + + const auto type = static_cast(j.type()); + switch (j.type()) + { + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } + + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } + + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } + + case BasicJsonType::value_t::string: + { + const auto h = std::hash {}(j.template get_ref()); + return combine(type, h); + } + + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_unsigned: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_float: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::binary: + { + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, static_cast(j.get_binary().subtype())); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash {}(byte)); + } + return seed; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return 0; // LCOV_EXCL_LINE + } +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/binary_reader.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/binary_reader.hpp new file mode 100644 index 0000000..832c36d --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/binary_reader.hpp @@ -0,0 +1,3010 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // generate_n +#include // array +#include // ldexp +#include // size_t +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // snprintf +#include // memcpy +#include // back_inserter +#include // numeric_limits +#include // char_traits, string +#include // make_pair, move +#include // vector + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// how to treat CBOR tags +enum class cbor_tag_handler_t +{ + error, ///< throw a parse_error exception in case of a tag + ignore, ///< ignore tags + store ///< store tags as binary type +}; + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianness(int num = 1) noexcept +{ + return *reinterpret_cast(&num) == 1; +} + + +/////////////////// +// binary reader // +/////////////////// + +/*! +@brief deserialization of CBOR, MessagePack, and UBJSON values +*/ +template> +class binary_reader +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + /*! + @brief create a binary reader + + @param[in] adapter input adapter to read from + */ + explicit binary_reader(InputAdapterType&& adapter, const input_format_t format = input_format_t::json) noexcept : ia(std::move(adapter)), input_format(format) + { + (void)detail::is_sax_static_asserts {}; + } + + // make class move-only + binary_reader(const binary_reader&) = delete; + binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + binary_reader& operator=(const binary_reader&) = delete; + binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~binary_reader() = default; + + /*! + @param[in] format the binary format to parse + @param[in] sax_ a SAX event processor + @param[in] strict whether to expect the input to be consumed completed + @param[in] tag_handler how to treat CBOR tags + + @return whether parsing was successful + */ + JSON_HEDLEY_NON_NULL(3) + bool sax_parse(const input_format_t format, + json_sax_t* sax_, + const bool strict = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + sax = sax_; + bool result = false; + + switch (format) + { + case input_format_t::bson: + result = parse_bson_internal(); + break; + + case input_format_t::cbor: + result = parse_cbor_internal(true, tag_handler); + break; + + case input_format_t::msgpack: + result = parse_msgpack_internal(); + break; + + case input_format_t::ubjson: + case input_format_t::bjdata: + result = parse_ubjson_internal(); + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + // strict mode: next byte must be EOF + if (result && strict) + { + if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata) + { + get_ignore_noop(); + } + else + { + get(); + } + + if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, + exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr)); + } + } + + return result; + } + + private: + ////////// + // BSON // + ////////// + + /*! + @brief Reads in a BSON-object and passes it to the SAX-parser. + @return whether a valid BSON-value was passed to the SAX parser + */ + bool parse_bson_internal() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) + { + return false; + } + + return sax->end_object(); + } + + /*! + @brief Parses a C-style string from the BSON input. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @return `true` if the \x00-byte indicating the end of the string was + encountered before the EOF; false` indicates an unexpected EOF. + */ + bool get_bson_cstr(string_t& result) + { + auto out = std::back_inserter(result); + while (true) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) + { + return false; + } + if (current == 0x00) + { + return true; + } + *out++ = static_cast(current); + } + } + + /*! + @brief Parses a zero-terminated string of length @a len from the BSON + input. + @param[in] len The length (including the zero-byte at the end) of the + string to be read. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 1 + @return `true` if the string was successfully parsed + */ + template + bool get_bson_string(const NumberType len, string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 1)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr)); + } + + return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in,out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr)); + } + + // All BSON binary values have a subtype + std::uint8_t subtype{}; + get_number(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); + } + + /*! + @brief Read a BSON document element of the given @a element_type. + @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html + @param[in] element_type_parse_position The position in the input stream, + where the `element_type` was read. + @warning Not all BSON element types are supported yet. An unsupported + @a element_type will give rise to a parse_error.114: + Unsupported BSON record type 0x... + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_internal(const char_int_type element_type, + const std::size_t element_type_parse_position) + { + switch (element_type) + { + case 0x01: // double + { + double number{}; + return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); + } + + case 0x02: // string + { + std::int32_t len{}; + string_t value; + return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); + } + + case 0x03: // object + { + return parse_bson_internal(); + } + + case 0x04: // array + { + return parse_bson_array(); + } + + case 0x05: // binary + { + std::int32_t len{}; + binary_t value; + return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); + } + + case 0x08: // boolean + { + return sax->boolean(get() != 0); + } + + case 0x0A: // null + { + return sax->null(); + } + + case 0x10: // int32 + { + std::int32_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x12: // int64 + { + std::int64_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + default: // anything else not supported (yet) + { + std::array cr{{}}; + static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + const std::string cr_str{cr.data()}; + return sax->parse_error(element_type_parse_position, cr_str, + parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr)); + } + } + } + + /*! + @brief Read a BSON element list (as specified in the BSON-spec) + + The same binary layout is used for objects and arrays, hence it must be + indicated with the argument @a is_array which one is expected + (true --> array, false --> object). + + @param[in] is_array Determines if the element list being read is to be + treated as an object (@a is_array == false), or as an + array (@a is_array == true). + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_list(const bool is_array) + { + string_t key; + + while (auto element_type = get()) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) + { + return false; + } + + const std::size_t element_type_parse_position = chars_read; + if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) + { + return false; + } + + if (!is_array && !sax->key(key)) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) + { + return false; + } + + // get_bson_cstr only appends + key.clear(); + } + + return true; + } + + /*! + @brief Reads an array from the BSON input and passes it to the SAX-parser. + @return whether a valid BSON-array was passed to the SAX parser + */ + bool parse_bson_array() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) + { + return false; + } + + return sax->end_array(); + } + + ////////// + // CBOR // + ////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true) or whether the last read character should + be considered instead (false) + @param[in] tag_handler how CBOR tags should be treated + + @return whether a valid CBOR value was passed to the SAX parser + */ + bool parse_cbor_internal(const bool get_char, + const cbor_tag_handler_t tag_handler) + { + switch (get_char ? get() : current) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::cbor, "value"); + + // Integer 0x00..0x17 (0..23) + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return sax->number_unsigned(static_cast(current)); + + case 0x18: // Unsigned integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x19: // Unsigned integer (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1A: // Unsigned integer (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1B: // Unsigned integer (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + // Negative integer -1-0x00..-1-0x17 (-1..-24) + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return sax->number_integer(static_cast(0x20 - 1 - current)); + + case 0x38: // Negative integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x39: // Negative integer -1-n (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) + - static_cast(number)); + } + + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) && sax->binary(b); + } + + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + case 0x7F: // UTF-8 string (indefinite length) + { + string_t s; + return get_cbor_string(s) && sax->string(s); + } + + // array (0x00..0x17 data items follow) + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + return get_cbor_array( + conditional_static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0x98: // array (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x99: // array (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9A: // array (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast(len), tag_handler); + } + + case 0x9B: // array (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(conditional_static_cast(len), tag_handler); + } + + case 0x9F: // array (indefinite length) + return get_cbor_array(static_cast(-1), tag_handler); + + // map (0x00..0x17 pairs of data items follow) + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + return get_cbor_object(conditional_static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0xB8: // map (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xB9: // map (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBA: // map (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast(len), tag_handler); + } + + case 0xBB: // map (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(conditional_static_cast(len), tag_handler); + } + + case 0xBF: // map (indefinite length) + return get_cbor_object(static_cast(-1), tag_handler); + + case 0xC6: // tagged item + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD8: // tagged item (1 bytes follow) + case 0xD9: // tagged item (2 bytes follow) + case 0xDA: // tagged item (4 bytes follow) + case 0xDB: // tagged item (8 bytes follow) + { + switch (tag_handler) + { + case cbor_tag_handler_t::error: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + + case cbor_tag_handler_t::ignore: + { + // ignore binary subtype + switch (current) + { + case 0xD8: + { + std::uint8_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xD9: + { + std::uint16_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDA: + { + std::uint32_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDB: + { + std::uint64_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + default: + break; + } + return parse_cbor_internal(true, tag_handler); + } + + case cbor_tag_handler_t::store: + { + binary_t b; + // use binary subtype and store in binary container + switch (current) + { + case 0xD8: + { + std::uint8_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xD9: + { + std::uint16_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDA: + { + std::uint32_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDB: + { + std::uint64_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + default: + return parse_cbor_internal(true, tag_handler); + } + get(); + return get_cbor_binary(b) && sax->binary(b); + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + case 0xF4: // false + return sax->boolean(false); + + case 0xF5: // true + return sax->boolean(true); + + case 0xF6: // null + return sax->null(); + + case 0xF9: // Half-Precision Float (two-byte IEEE 754) + { + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte1 << 8u) + byte2); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 0xFA: // Single-Precision Float (four-byte IEEE 754) + { + float number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + case 0xFB: // Double-Precision Float (eight-byte IEEE 754) + { + double number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + default: // anything else (0xFF is handled inside the other types) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + } + } + + /*! + @brief reads a CBOR string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + Additionally, CBOR's strings with indefinite lengths are supported. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_cbor_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) + { + return false; + } + + switch (current) + { + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + { + return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7F: // UTF-8 string (indefinite length) + { + while (get() != 0xFF) + { + string_t chunk; + if (!get_cbor_string(chunk)) + { + return false; + } + result.append(chunk); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr)); + } + } + } + + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (!get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr)); + } + } + } + + /*! + @param[in] len the length of the array or static_cast(-1) for an + array of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether array creation completed + */ + bool get_cbor_array(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + if (len != static_cast(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) + { + return false; + } + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object or static_cast(-1) for an + object of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether object creation completed + */ + bool get_cbor_object(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + if (len != 0) + { + string_t key; + if (len != static_cast(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + } + + return sax->end_object(); + } + + ///////////// + // MsgPack // + ///////////// + + /*! + @return whether a valid MessagePack value was passed to the SAX parser + */ + bool parse_msgpack_internal() + { + switch (get()) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::msgpack, "value"); + + // positive fixint + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + return sax->number_unsigned(static_cast(current)); + + // fixmap + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + return get_msgpack_object(conditional_static_cast(static_cast(current) & 0x0Fu)); + + // fixarray + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + return get_msgpack_array(conditional_static_cast(static_cast(current) & 0x0Fu)); + + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 + { + string_t s; + return get_msgpack_string(s) && sax->string(s); + } + + case 0xC0: // nil + return sax->null(); + + case 0xC2: // false + return sax->boolean(false); + + case 0xC3: // true + return sax->boolean(true); + + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) && sax->binary(b); + } + + case 0xCA: // float 32 + { + float number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCB: // float 64 + { + double number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCC: // uint 8 + { + std::uint8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCD: // uint 16 + { + std::uint16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCE: // uint 32 + { + std::uint32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCF: // uint 64 + { + std::uint64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xD0: // int 8 + { + std::int8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD1: // int 16 + { + std::int16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD2: // int 32 + { + std::int32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD3: // int 64 + { + std::int64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xDC: // array 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDD: // array 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(conditional_static_cast(len)); + } + + case 0xDE: // map 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + case 0xDF: // map 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(conditional_static_cast(len)); + } + + // negative fixint + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: + return sax->number_integer(static_cast(current)); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr)); + } + } + } + + /*! + @brief reads a MessagePack string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_msgpack_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) + { + return false; + } + + switch (current) + { + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + { + return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); + } + + case 0xD9: // str 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDA: // str 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDB: // str 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr)); + } + } + } + + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 1, result) && + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 2, result) && + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 4, result) && + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 8, result) && + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 16, result) && + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + /*! + @param[in] len the length of the array + @return whether array creation completed + */ + bool get_msgpack_array(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object + @return whether object creation completed + */ + bool get_msgpack_object(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + key.clear(); + } + + return sax->end_object(); + } + + //////////// + // UBJSON // + //////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether a valid UBJSON value was passed to the SAX parser + */ + bool parse_ubjson_internal(const bool get_char = true) + { + return get_ubjson_value(get_char ? get_ignore_noop() : current); + } + + /*! + @brief reads a UBJSON string + + This function is either called after reading the 'S' byte explicitly + indicating a string, or in case of an object key where the 'S' byte can be + left out. + + @param[out] result created string + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether string creation completed + */ + bool get_ubjson_string(string_t& result, const bool get_char = true) + { + if (get_char) + { + get(); // TODO(niels): may we ignore N here? + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) + { + return false; + } + + switch (current) + { + case 'U': + { + std::uint8_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'i': + { + std::int8_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'I': + { + std::int16_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'l': + { + std::int32_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'L': + { + std::int64_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t len{}; + return get_number(input_format, len) && get_string(input_format, len, result); + } + + default: + break; + } + auto last_token = get_token_string(); + std::string message; + + if (input_format != input_format_t::bjdata) + { + message = "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token; + } + else + { + message = "expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x" + last_token; + } + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "string"), nullptr)); + } + + /*! + @param[out] dim an integer vector storing the ND array dimensions + @return whether reading ND array size vector is successful + */ + bool get_ubjson_ndarray_size(std::vector& dim) + { + std::pair size_and_type; + size_t dimlen = 0; + bool no_ndarray = true; + + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray))) + { + return false; + } + + if (size_and_type.first != npos) + { + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second))) + { + return false; + } + dim.push_back(dimlen); + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray))) + { + return false; + } + dim.push_back(dimlen); + } + } + } + else + { + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current))) + { + return false; + } + dim.push_back(dimlen); + get_ignore_noop(); + } + } + return true; + } + + /*! + @param[out] result determined size + @param[in,out] is_ndarray for input, `true` means already inside an ndarray vector + or ndarray dimension is not allowed; `false` means ndarray + is allowed; for output, `true` means an ndarray is found; + is_ndarray can only return `true` when its initial value + is `false` + @param[in] prefix type marker if already read, otherwise set to 0 + + @return whether size determination completed + */ + bool get_ubjson_size_value(std::size_t& result, bool& is_ndarray, char_int_type prefix = 0) + { + if (prefix == 0) + { + prefix = get_ignore_noop(); + } + + switch (prefix) + { + case 'U': + { + std::uint8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'i': + { + std::int8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char + return true; + } + + case 'I': + { + std::int16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast(number); + return true; + } + + case 'l': + { + std::int32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + result = static_cast(number); + return true; + } + + case 'L': + { + std::int64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (number < 0) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, + exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr)); + } + if (!value_in_range_of(number)) + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, + exception_message(input_format, "integer value overflow", "size"), nullptr)); + } + result = static_cast(number); + return true; + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + result = conditional_static_cast(number); + return true; + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format, number))) + { + return false; + } + if (!value_in_range_of(number)) + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, + exception_message(input_format, "integer value overflow", "size"), nullptr)); + } + result = detail::conditional_static_cast(number); + return true; + } + + case '[': + { + if (input_format != input_format_t::bjdata) + { + break; + } + if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr)); + } + std::vector dim; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim))) + { + return false; + } + if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector + { + result = dim.at(dim.size() - 1); + return true; + } + if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format + { + for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container + { + if ( i == 0 ) + { + result = 0; + return true; + } + } + + string_t key = "_ArraySize_"; + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size()))) + { + return false; + } + result = 1; + for (auto i : dim) + { + result *= i; + if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type() + { + return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr)); + } + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast(i)))) + { + return false; + } + } + is_ndarray = true; + return sax->end_array(); + } + result = 0; + return true; + } + + default: + break; + } + auto last_token = get_token_string(); + std::string message; + + if (input_format != input_format_t::bjdata) + { + message = "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token; + } + else + { + message = "expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x" + last_token; + } + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, message, "size"), nullptr)); + } + + /*! + @brief determine the type and size for a container + + In the optimized UBJSON format, a type and a size can be provided to allow + for a more compact representation. + + @param[out] result pair of the size and the type + @param[in] inside_ndarray whether the parser is parsing an ND array dimensional vector + + @return whether pair creation completed + */ + bool get_ubjson_size_type(std::pair& result, bool inside_ndarray = false) + { + result.first = npos; // size + result.second = 0; // type + bool is_ndarray = false; + + get_ignore_noop(); + + if (current == '$') + { + result.second = get(); // must not ignore 'N', because 'N' maybe the type + if (input_format == input_format_t::bjdata + && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second))) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type"))) + { + return false; + } + + get_ignore_noop(); + if (JSON_HEDLEY_UNLIKELY(current != '#')) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "value"))) + { + return false; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr)); + } + + const bool is_error = get_ubjson_size_value(result.first, is_ndarray); + if (input_format == input_format_t::bjdata && is_ndarray) + { + if (inside_ndarray) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, + exception_message(input_format, "ndarray can not be recursive", "size"), nullptr)); + } + result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters + } + return is_error; + } + + if (current == '#') + { + const bool is_error = get_ubjson_size_value(result.first, is_ndarray); + if (input_format == input_format_t::bjdata && is_ndarray) + { + return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, + exception_message(input_format, "ndarray requires both type and size", "size"), nullptr)); + } + return is_error; + } + + return true; + } + + /*! + @param prefix the previously read or set type prefix + @return whether value creation completed + */ + bool get_ubjson_value(const char_int_type prefix) + { + switch (prefix) + { + case std::char_traits::eof(): // EOF + return unexpect_eof(input_format, "value"); + + case 'T': // true + return sax->boolean(true); + case 'F': // false + return sax->boolean(false); + + case 'Z': // null + return sax->null(); + + case 'U': + { + std::uint8_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'i': + { + std::int8_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'I': + { + std::int16_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'l': + { + std::int32_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'L': + { + std::int64_t number{}; + return get_number(input_format, number) && sax->number_integer(number); + } + + case 'u': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint16_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'm': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint32_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'M': + { + if (input_format != input_format_t::bjdata) + { + break; + } + std::uint64_t number{}; + return get_number(input_format, number) && sax->number_unsigned(number); + } + + case 'h': + { + if (input_format != input_format_t::bjdata) + { + break; + } + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte2 << 8u) + byte1); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 'd': + { + float number{}; + return get_number(input_format, number) && sax->number_float(static_cast(number), ""); + } + + case 'D': + { + double number{}; + return get_number(input_format, number) && sax->number_float(static_cast(number), ""); + } + + case 'H': + { + return get_ubjson_high_precision_number(); + } + + case 'C': // char + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "char"))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(current > 127)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, + exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr)); + } + string_t s(1, static_cast(current)); + return sax->string(s); + } + + case 'S': // string + { + string_t s; + return get_ubjson_string(s) && sax->string(s); + } + + case '[': // array + return get_ubjson_array(); + + case '{': // object + return get_ubjson_object(); + + default: // anything else + break; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr)); + } + + /*! + @return whether array creation completed + */ + bool get_ubjson_array() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata): + // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]} + + if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) + { + size_and_type.second &= ~(static_cast(1) << 8); // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker + auto it = std::lower_bound(bjd_types_map.begin(), bjd_types_map.end(), size_and_type.second, [](const bjd_type & p, char_int_type t) + { + return p.first < t; + }); + string_t key = "_ArrayType_"; + if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr)); + } + + string_t type = it->second; // sax->string() takes a reference + if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->string(type))) + { + return false; + } + + if (size_and_type.second == 'C') + { + size_and_type.second = 'U'; + } + + key = "_ArrayData_"; + if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) )) + { + return false; + } + + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + + return (sax->end_array() && sax->end_object()); + } + + if (size_and_type.first != npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) + { + return false; + } + get_ignore_noop(); + } + } + + return sax->end_array(); + } + + /*! + @return whether object creation completed + */ + bool get_ubjson_object() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + // do not accept ND-array size in objects in BJData + if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, + exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr)); + } + + string_t key; + if (size_and_type.first != npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + key.clear(); + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + key.clear(); + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + while (current != '}') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + get_ignore_noop(); + key.clear(); + } + } + + return sax->end_object(); + } + + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + + bool get_ubjson_high_precision_number() + { + // get size of following number string + std::size_t size{}; + bool no_ndarray = true; + auto res = get_ubjson_size_value(size, no_ndarray); + if (JSON_HEDLEY_UNLIKELY(!res)) + { + return res; + } + + // get number string + std::vector number_vector; + for (std::size_t i = 0; i < size; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number"))) + { + return false; + } + number_vector.push_back(static_cast(current)); + } + + // parse number string + using ia_type = decltype(detail::input_adapter(number_vector)); + auto number_lexer = detail::lexer(detail::input_adapter(number_vector), false); + const auto result_number = number_lexer.scan(); + const auto number_string = number_lexer.get_token_string(); + const auto result_remainder = number_lexer.scan(); + + using token_type = typename detail::lexer_base::token_type; + + if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) + { + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, + exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); + } + + switch (result_number) + { + case token_type::value_integer: + return sax->number_integer(number_lexer.get_number_integer()); + case token_type::value_unsigned: + return sax->number_unsigned(number_lexer.get_number_unsigned()); + case token_type::value_float: + return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); + case token_type::uninitialized: + case token_type::literal_true: + case token_type::literal_false: + case token_type::literal_null: + case token_type::value_string: + case token_type::begin_array: + case token_type::begin_object: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::parse_error: + case token_type::end_of_input: + case token_type::literal_or_value: + default: + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, + exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr)); + } + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /*! + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a -'ve valued + `std::char_traits::eof()` in that case. + + @return character read from the input + */ + char_int_type get() + { + ++chars_read; + return current = ia.get_character(); + } + + /*! + @return character read from the input after ignoring all 'N' entries + */ + char_int_type get_ignore_noop() + { + do + { + get(); + } + while (current == 'N'); + + return current; + } + + /* + @brief read a number from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[out] result number of type @a NumberType + + @return whether conversion completed + + @note This function needs to respect the system's endianness, because + bytes in CBOR, MessagePack, and UBJSON are stored in network order + (big endian) and therefore need reordering on little endian systems. + On the other hand, BSON and BJData use little endian and should reorder + on big endian systems. + */ + template + bool get_number(const input_format_t format, NumberType& result) + { + // step 1: read input into array with system's byte order + std::array vec{}; + for (std::size_t i = 0; i < sizeof(NumberType); ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) + { + return false; + } + + // reverse byte order prior to conversion if necessary + if (is_little_endian != (InputIsLittleEndian || format == input_format_t::bjdata)) + { + vec[sizeof(NumberType) - i - 1] = static_cast(current); + } + else + { + vec[i] = static_cast(current); // LCOV_EXCL_LINE + } + } + + // step 2: convert array into number of type T and return + std::memcpy(&result, vec.data(), sizeof(NumberType)); + return true; + } + + /*! + @brief create a string by reading characters from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of characters to read + @param[out] result string created by reading @a len bytes + + @return whether string creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of string memory. + */ + template + bool get_string(const input_format_t format, + const NumberType len, + string_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @param[in] format the current format (for diagnostics) + @param[in] context further context information (for diagnostics) + @return whether the last read character is not EOF + */ + JSON_HEDLEY_NON_NULL(3) + bool unexpect_eof(const input_format_t format, const char* context) const + { + if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) + { + return sax->parse_error(chars_read, "", + parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr)); + } + return true; + } + + /*! + @return a string representation of the last read byte + */ + std::string get_token_string() const + { + std::array cr{{}}; + static_cast((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return std::string{cr.data()}; + } + + /*! + @param[in] format the current format + @param[in] detail a detailed error message + @param[in] context further context information + @return a message string to use in the parse_error exceptions + */ + std::string exception_message(const input_format_t format, + const std::string& detail, + const std::string& context) const + { + std::string error_msg = "syntax error while parsing "; + + switch (format) + { + case input_format_t::cbor: + error_msg += "CBOR"; + break; + + case input_format_t::msgpack: + error_msg += "MessagePack"; + break; + + case input_format_t::ubjson: + error_msg += "UBJSON"; + break; + + case input_format_t::bson: + error_msg += "BSON"; + break; + + case input_format_t::bjdata: + error_msg += "BJData"; + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + return concat(error_msg, ' ', context, ": ", detail); + } + + private: + static JSON_INLINE_VARIABLE constexpr std::size_t npos = static_cast(-1); + + /// input adapter + InputAdapterType ia; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// the number of characters read + std::size_t chars_read = 0; + + /// whether we can assume little endianness + const bool is_little_endian = little_endianness(); + + /// input format + const input_format_t input_format = input_format_t::json; + + /// the SAX parser + json_sax_t* sax = nullptr; + + // excluded markers in bjdata optimized type +#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \ + make_array('F', 'H', 'N', 'S', 'T', 'Z', '[', '{') + +#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \ + make_array( \ + bjd_type{'C', "char"}, \ + bjd_type{'D', "double"}, \ + bjd_type{'I', "int16"}, \ + bjd_type{'L', "int64"}, \ + bjd_type{'M', "uint64"}, \ + bjd_type{'U', "uint8"}, \ + bjd_type{'d', "single"}, \ + bjd_type{'i', "int8"}, \ + bjd_type{'l', "int32"}, \ + bjd_type{'m', "uint32"}, \ + bjd_type{'u', "uint16"}) + + JSON_PRIVATE_UNLESS_TESTED: + // lookup tables + // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) + const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers = + JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_; + + using bjd_type = std::pair; + // NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes) + const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map = + JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_; + +#undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ +#undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr std::size_t binary_reader::npos; +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/input_adapters.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/input_adapters.hpp new file mode 100644 index 0000000..cf53b1d --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/input_adapters.hpp @@ -0,0 +1,494 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // size_t +#include // strlen +#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include // shared_ptr, make_shared, addressof +#include // accumulate +#include // string, char_traits +#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include // pair, declval + +#ifndef JSON_NO_IO + #include // FILE * + #include // istream +#endif // JSON_NO_IO + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson, bjdata }; + +//////////////////// +// input adapters // +//////////////////// + +#ifndef JSON_NO_IO +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter +{ + public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + { + JSON_ASSERT(m_file != nullptr); + } + + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) noexcept = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + ~file_input_adapter() = default; + + std::char_traits::int_type get_character() noexcept + { + return std::fgetc(m_file); + } + + private: + /// the file pointer to read from + std::FILE* m_file; +}; + + +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter +{ + public: + using char_type = char; + + ~input_stream_adapter() + { + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } + } + + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} + + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } + + // std::istream/std::streambuf use std::char_traits::to_int_type, to + // ensure that std::char_traits::eof() and the character 0xFF do not + // end up as the same value, e.g. 0xFFFFFFFF. + std::char_traits::int_type get_character() + { + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; +}; +#endif // JSON_NO_IO + +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter +{ + public: + using char_type = typename std::iterator_traits::value_type; + + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) + {} + + typename std::char_traits::int_type get_character() + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } + + return std::char_traits::eof(); + } + + private: + IteratorType current; + IteratorType end; + + template + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } +}; + + +template +struct wide_string_input_helper; + +template +struct wide_string_input_helper +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } +}; + +template +struct wide_string_input_helper +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-16 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } + } +}; + +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter +{ + public: + using char_type = char; + + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer(); + + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } + + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } + + private: + BaseInputAdapter base_adapter; + + template + void fill_buffer() + { + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } + + /// a buffer for UTF-8 bytes + std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; + + +template +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; + +template +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template +struct iterator_input_adapter_factory::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; + +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} + +// Convenience shorthand from container to iterator +// Enables ADL on begin(container) and end(container) +// Encloses the using declarations in namespace for not to leak them to outside scope + +namespace container_input_adapter_factory_impl +{ + +using std::begin; +using std::end; + +template +struct container_input_adapter_factory {}; + +template +struct container_input_adapter_factory< ContainerType, + void_t()), end(std::declval()))>> + { + using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); + + static adapter_type create(const ContainerType& container) +{ + return input_adapter(begin(container), end(container)); +} + }; + +} // namespace container_input_adapter_factory_impl + +template +typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) +{ + return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); +} + +#ifndef JSON_NO_IO +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} +#endif // JSON_NO_IO + +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + !std::is_array::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + const auto* ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitly cast +// to the correct adapter. +class span_input_adapter +{ + public: + template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} + + template::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} + + contiguous_bytes_input_adapter&& get() + { + return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) + } + + private: + contiguous_bytes_input_adapter ia; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/json_sax.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/json_sax.hpp new file mode 100644 index 0000000..1bf46c2 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/json_sax.hpp @@ -0,0 +1,728 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include // string +#include // move +#include // vector + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/*! +@brief SAX interface + +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template +struct json_sax +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; + + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; + + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; + + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; + + /*! + @brief a floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; + + /*! + @brief a string value was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string value. + */ + virtual bool string(string_t& val) = 0; + + /*! + @brief a binary value was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary value. + */ + virtual bool binary(binary_t& val) = 0; + + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; + + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; + + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; + + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; + + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; + + json_sax() = default; + json_sax(const json_sax&) = default; + json_sax(json_sax&&) noexcept = default; + json_sax& operator=(const json_sax&) = default; + json_sax& operator=(json_sax&&) noexcept = default; + virtual ~json_sax() = default; +}; + + +namespace detail +{ +/*! +@brief SAX implementation to create a JSON value from SAX events + +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. + +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. + +@tparam BasicJsonType the JSON type +*/ +template +class json_sax_dom_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @param[in,out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) + : root(r), allow_exceptions(allow_exceptions_) + {} + + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_object()); + + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val)); + return true; + } + + bool end_object() + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_object()); + + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + + if (JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool end_array() + { + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(ref_stack.back()->is_array()); + + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward(v)); + return &root; + } + + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_data.m_value.array->emplace_back(std::forward(v)); + return &(ref_stack.back()->m_data.m_value.array->back()); + } + + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward(v)); + return object_element; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +template +class json_sax_dom_callback_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; + + json_sax_dom_callback_parser(BasicJsonType& r, + const parser_callback_t cb, + const bool allow_exceptions_ = true) + : root(r), callback(cb), allow_exceptions(allow_exceptions_) + { + keep_stack.push_back(true); + } + + // make class move-only + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_callback_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + // check callback for object start + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + // check object limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive object size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val) = discarded); + } + + return true; + } + + bool end_object() + { + if (ref_stack.back()) + { + if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + } + else + { + ref_stack.back()->set_parents(); + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + + return true; + } + + bool start_array(std::size_t len) + { + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + // check array limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != static_cast(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, concat("excessive array size: ", std::to_string(len)), ref_stack.back())); + } + + return true; + } + + bool end_array() + { + bool keep = true; + + if (ref_stack.back()) + { + keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); + if (keep) + { + ref_stack.back()->set_parents(); + } + else + { + // discard array + *ref_stack.back() = discarded; + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + // remove discarded value + if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) + { + ref_stack.back()->m_data.m_value.array->pop_back(); + } + + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @param[in] v value to add to the JSON value we build during parsing + @param[in] skip_callback whether we should skip calling the callback + function; this is required after start_array() and + start_object() SAX events, because otherwise we would call the + callback function with an empty array or object, respectively. + + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + + @return pair of boolean (whether value should be kept) and pointer (to the + passed value in the ref_stack hierarchy; nullptr if not kept) + */ + template + std::pair handle_value(Value&& v, const bool skip_callback = false) + { + JSON_ASSERT(!keep_stack.empty()); + + // do not handle this value if we know it would be added to a discarded + // container + if (!keep_stack.back()) + { + return {false, nullptr}; + } + + // create value + auto value = BasicJsonType(std::forward(v)); + + // check callback + const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); + + // do not handle this value if we just learnt it shall be discarded + if (!keep) + { + return {false, nullptr}; + } + + if (ref_stack.empty()) + { + root = std::move(value); + return {true, &root}; + } + + // skip this value if we already decided to skip the parent + // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) + if (!ref_stack.back()) + { + return {false, nullptr}; + } + + // we now only expect arrays and objects + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + // array + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_data.m_value.array->emplace_back(std::move(value)); + return {true, &(ref_stack.back()->m_data.m_value.array->back())}; + } + + // object + JSON_ASSERT(ref_stack.back()->is_object()); + // check if we should store an element for the current key + JSON_ASSERT(!key_keep_stack.empty()); + const bool store_element = key_keep_stack.back(); + key_keep_stack.pop_back(); + + if (!store_element) + { + return {false, nullptr}; + } + + JSON_ASSERT(object_element); + *object_element = std::move(value); + return {true, object_element}; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// stack to manage which values to keep + std::vector keep_stack {}; + /// stack to manage which object keys to keep + std::vector key_keep_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// callback function + const parser_callback_t callback = nullptr; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// a discarded value for the callback + BasicJsonType discarded = BasicJsonType::value_t::discarded; +}; + +template +class json_sax_acceptor +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + bool null() + { + return true; + } + + bool boolean(bool /*unused*/) + { + return true; + } + + bool number_integer(number_integer_t /*unused*/) + { + return true; + } + + bool number_unsigned(number_unsigned_t /*unused*/) + { + return true; + } + + bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) + { + return true; + } + + bool string(string_t& /*unused*/) + { + return true; + } + + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = static_cast(-1)) + { + return true; + } + + bool key(string_t& /*unused*/) + { + return true; + } + + bool end_object() + { + return true; + } + + bool start_array(std::size_t /*unused*/ = static_cast(-1)) + { + return true; + } + + bool end_array() + { + return true; + } + + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) + { + return false; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/lexer.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/lexer.hpp new file mode 100644 index 0000000..72e9951 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/lexer.hpp @@ -0,0 +1,1632 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // localeconv +#include // size_t +#include // snprintf +#include // strtof, strtod, strtold, strtoll, strtoull +#include // initializer_list +#include // char_traits, string +#include // move +#include // vector + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////// +// lexer // +/////////// + +template +class lexer_base +{ + public: + /// token types for the parser + enum class token_type + { + uninitialized, ///< indicating the scanner is uninitialized + literal_true, ///< the `true` literal + literal_false, ///< the `false` literal + literal_null, ///< the `null` literal + value_string, ///< a string -- use get_string() for actual value + value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value + value_integer, ///< a signed integer -- use get_number_integer() for actual value + value_float, ///< an floating point number -- use get_number_float() for actual value + begin_array, ///< the character for array begin `[` + begin_object, ///< the character for object begin `{` + end_array, ///< the character for array end `]` + end_object, ///< the character for object end `}` + name_separator, ///< the name separator `:` + value_separator, ///< the value separator `,` + parse_error, ///< indicating a parse error + end_of_input, ///< indicating the end of the input buffer + literal_or_value ///< a literal or the begin of a value (only for diagnostics) + }; + + /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST + static const char* token_type_name(const token_type t) noexcept + { + switch (t) + { + case token_type::uninitialized: + return ""; + case token_type::literal_true: + return "true literal"; + case token_type::literal_false: + return "false literal"; + case token_type::literal_null: + return "null literal"; + case token_type::value_string: + return "string literal"; + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: + return "number literal"; + case token_type::begin_array: + return "'['"; + case token_type::begin_object: + return "'{'"; + case token_type::end_array: + return "']'"; + case token_type::end_object: + return "'}'"; + case token_type::name_separator: + return "':'"; + case token_type::value_separator: + return "','"; + case token_type::parse_error: + return ""; + case token_type::end_of_input: + return "end of input"; + case token_type::literal_or_value: + return "'[', '{', or a literal"; + // LCOV_EXCL_START + default: // catch non-enum values + return "unknown token"; + // LCOV_EXCL_STOP + } + } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template +class lexer : public lexer_base +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + using token_type = typename lexer_base::token_type; + + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept + : ia(std::move(adapter)) + , ignore_comments(ignore_comments_) + , decimal_point_char(static_cast(get_decimal_point())) + {} + + // delete because of pointer members + lexer(const lexer&) = delete; + lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + lexer& operator=(lexer&) = delete; + lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~lexer() = default; + + private: + ///////////////////// + // locales + ///////////////////// + + /// return the locale-dependent decimal point + JSON_HEDLEY_PURE + static char get_decimal_point() noexcept + { + const auto* loc = localeconv(); + JSON_ASSERT(loc != nullptr); + return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); + } + + ///////////////////// + // scan functions + ///////////////////// + + /*! + @brief get codepoint from 4 hex characters following `\u` + + For input "\u c1 c2 c3 c4" the codepoint is: + (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 + = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) + + Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' + must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The + conversion is done by subtracting the offset (0x30, 0x37, and 0x57) + between the ASCII value of the character and the desired integer value. + + @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or + non-hex character) + */ + int get_codepoint() + { + // this function only makes sense after reading `\u` + JSON_ASSERT(current == 'u'); + int codepoint = 0; + + const auto factors = { 12u, 8u, 4u, 0u }; + for (const auto factor : factors) + { + get(); + + if (current >= '0' && current <= '9') + { + codepoint += static_cast((static_cast(current) - 0x30u) << factor); + } + else if (current >= 'A' && current <= 'F') + { + codepoint += static_cast((static_cast(current) - 0x37u) << factor); + } + else if (current >= 'a' && current <= 'f') + { + codepoint += static_cast((static_cast(current) - 0x57u) << factor); + } + else + { + return -1; + } + } + + JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); + return codepoint; + } + + /*! + @brief check if the next byte(s) are inside a given range + + Adds the current byte and, for each passed range, reads a new byte and + checks if it is inside the range. If a violation was detected, set up an + error message and return false. Otherwise, return true. + + @param[in] ranges list of integers; interpreted as list of pairs of + inclusive lower and upper bound, respectively + + @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, + 1, 2, or 3 pairs. This precondition is enforced by an assertion. + + @return true if and only if no range violation was detected + */ + bool next_byte_in_range(std::initializer_list ranges) + { + JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); + add(current); + + for (auto range = ranges.begin(); range != ranges.end(); ++range) + { + get(); + if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) + { + add(current); + } + else + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return false; + } + } + + return true; + } + + /*! + @brief scan a string literal + + This function scans a string according to Sect. 7 of RFC 8259. While + scanning, bytes are escaped and copied into buffer token_buffer. Then the + function returns successfully, token_buffer is *not* null-terminated (as it + may contain \0 bytes), and token_buffer.size() is the number of bytes in the + string. + + @return token_type::value_string if string could be successfully scanned, + token_type::parse_error otherwise + + @note In case of errors, variable error_message contains a textual + description. + */ + token_type scan_string() + { + // reset token_buffer (ignore opening quote) + reset(); + + // we entered the function by reading an open quote + JSON_ASSERT(current == '\"'); + + while (true) + { + // get next character + switch (get()) + { + // end of file while parsing string + case std::char_traits::eof(): + { + error_message = "invalid string: missing closing quote"; + return token_type::parse_error; + } + + // closing quote + case '\"': + { + return token_type::value_string; + } + + // escapes + case '\\': + { + switch (get()) + { + // quotation mark + case '\"': + add('\"'); + break; + // reverse solidus + case '\\': + add('\\'); + break; + // solidus + case '/': + add('/'); + break; + // backspace + case 'b': + add('\b'); + break; + // form feed + case 'f': + add('\f'); + break; + // line feed + case 'n': + add('\n'); + break; + // carriage return + case 'r': + add('\r'); + break; + // tab + case 't': + add('\t'); + break; + + // unicode escapes + case 'u': + { + const int codepoint1 = get_codepoint(); + int codepoint = codepoint1; // start with codepoint1 + + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if code point is a high surrogate + if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) + { + // expect next \uxxxx entry + if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) + { + const int codepoint2 = get_codepoint(); + + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if codepoint2 is a low surrogate + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) + { + // overwrite codepoint + codepoint = static_cast( + // high surrogate occupies the most significant 22 bits + (static_cast(codepoint1) << 10u) + // low surrogate occupies the least significant 15 bits + + static_cast(codepoint2) + // there is still the 0xD800, 0xDC00 and 0x10000 noise + // in the result, so we have to subtract with: + // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 + - 0x35FDC00u); + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) + { + error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; + return token_type::parse_error; + } + } + + // result of the above calculation yields a proper codepoint + JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); + + // translate codepoint into bytes + if (codepoint < 0x80) + { + // 1-byte characters: 0xxxxxxx (ASCII) + add(static_cast(codepoint)); + } + else if (codepoint <= 0x7FF) + { + // 2-byte characters: 110xxxxx 10xxxxxx + add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else if (codepoint <= 0xFFFF) + { + // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx + add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else + { + // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + + break; + } + + // other characters after escape + default: + error_message = "invalid string: forbidden character after backslash"; + return token_type::parse_error; + } + + break; + } + + // invalid control characters + case 0x00: + { + error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; + return token_type::parse_error; + } + + case 0x01: + { + error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; + return token_type::parse_error; + } + + case 0x02: + { + error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; + return token_type::parse_error; + } + + case 0x03: + { + error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; + return token_type::parse_error; + } + + case 0x04: + { + error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; + return token_type::parse_error; + } + + case 0x05: + { + error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; + return token_type::parse_error; + } + + case 0x06: + { + error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; + return token_type::parse_error; + } + + case 0x07: + { + error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; + return token_type::parse_error; + } + + case 0x08: + { + error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; + return token_type::parse_error; + } + + case 0x09: + { + error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; + return token_type::parse_error; + } + + case 0x0A: + { + error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; + return token_type::parse_error; + } + + case 0x0B: + { + error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; + return token_type::parse_error; + } + + case 0x0C: + { + error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; + return token_type::parse_error; + } + + case 0x0D: + { + error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; + return token_type::parse_error; + } + + case 0x0E: + { + error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; + return token_type::parse_error; + } + + case 0x0F: + { + error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; + return token_type::parse_error; + } + + case 0x10: + { + error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; + return token_type::parse_error; + } + + case 0x11: + { + error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; + return token_type::parse_error; + } + + case 0x12: + { + error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; + return token_type::parse_error; + } + + case 0x13: + { + error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; + return token_type::parse_error; + } + + case 0x14: + { + error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; + return token_type::parse_error; + } + + case 0x15: + { + error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; + return token_type::parse_error; + } + + case 0x16: + { + error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; + return token_type::parse_error; + } + + case 0x17: + { + error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; + return token_type::parse_error; + } + + case 0x18: + { + error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; + return token_type::parse_error; + } + + case 0x19: + { + error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; + return token_type::parse_error; + } + + case 0x1A: + { + error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; + return token_type::parse_error; + } + + case 0x1B: + { + error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; + return token_type::parse_error; + } + + case 0x1C: + { + error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; + return token_type::parse_error; + } + + case 0x1D: + { + error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; + return token_type::parse_error; + } + + case 0x1E: + { + error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; + return token_type::parse_error; + } + + case 0x1F: + { + error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; + return token_type::parse_error; + } + + // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) + case 0x20: + case 0x21: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + { + add(current); + break; + } + + // U+0080..U+07FF: bytes C2..DF 80..BF + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + { + if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) + { + return token_type::parse_error; + } + break; + } + + // U+0800..U+0FFF: bytes E0 A0..BF 80..BF + case 0xE0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF + // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xEE: + case 0xEF: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+D000..U+D7FF: bytes ED 80..9F 80..BF + case 0xED: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + case 0xF0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + case 0xF1: + case 0xF2: + case 0xF3: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF + case 0xF4: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // remaining bytes (80..C1 and F5..FF) are ill-formed + default: + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return token_type::parse_error; + } + } + } + } + + /*! + * @brief scan a comment + * @return whether comment could be scanned successfully + */ + bool scan_comment() + { + switch (get()) + { + // single-line comments skip input until a newline or EOF is read + case '/': + { + while (true) + { + switch (get()) + { + case '\n': + case '\r': + case std::char_traits::eof(): + case '\0': + return true; + + default: + break; + } + } + } + + // multi-line comments skip input until */ is read + case '*': + { + while (true) + { + switch (get()) + { + case std::char_traits::eof(): + case '\0': + { + error_message = "invalid comment; missing closing '*/'"; + return false; + } + + case '*': + { + switch (get()) + { + case '/': + return true; + + default: + { + unget(); + continue; + } + } + } + + default: + continue; + } + } + } + + // unexpected character after reading '/' + default: + { + error_message = "invalid comment; expecting '/' or '*' after '/'"; + return false; + } + } + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(float& f, const char* str, char** endptr) noexcept + { + f = std::strtof(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(double& f, const char* str, char** endptr) noexcept + { + f = std::strtod(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(long double& f, const char* str, char** endptr) noexcept + { + f = std::strtold(str, endptr); + } + + /*! + @brief scan a number literal + + This function scans a string according to Sect. 6 of RFC 8259. + + The function is realized with a deterministic finite state machine derived + from the grammar described in RFC 8259. Starting in state "init", the + input is read and used to determined the next state. Only state "done" + accepts the number. State "error" is a trap state to model errors. In the + table below, "anything" means any character but the ones listed before. + + state | 0 | 1-9 | e E | + | - | . | anything + ---------|----------|----------|----------|---------|---------|----------|----------- + init | zero | any1 | [error] | [error] | minus | [error] | [error] + minus | zero | any1 | [error] | [error] | [error] | [error] | [error] + zero | done | done | exponent | done | done | decimal1 | done + any1 | any1 | any1 | exponent | done | done | decimal1 | done + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] + decimal2 | decimal2 | decimal2 | exponent | done | done | done | done + exponent | any2 | any2 | [error] | sign | sign | [error] | [error] + sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] + any2 | any2 | any2 | done | done | done | done | done + + The state machine is realized with one label per state (prefixed with + "scan_number_") and `goto` statements between them. The state machine + contains cycles, but any cycle can be left when EOF is read. Therefore, + the function is guaranteed to terminate. + + During scanning, the read bytes are stored in token_buffer. This string is + then converted to a signed integer, an unsigned integer, or a + floating-point number. + + @return token_type::value_unsigned, token_type::value_integer, or + token_type::value_float if number could be successfully scanned, + token_type::parse_error otherwise + + @note The scanner is independent of the current locale. Internally, the + locale's decimal point is used instead of `.` to work with the + locale-dependent converters. + */ + token_type scan_number() // lgtm [cpp/use-of-goto] + { + // reset token_buffer to store the number's bytes + reset(); + + // the type of the parsed number; initially set to unsigned; will be + // changed if minus sign, decimal point or exponent is read + token_type number_type = token_type::value_unsigned; + + // state (init): we just found out we need to scan a number + switch (current) + { + case '-': + { + add(current); + goto scan_number_minus; + } + + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + // all other characters are rejected outside scan_number() + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + +scan_number_minus: + // state: we just parsed a leading minus sign + number_type = token_type::value_integer; + switch (get()) + { + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + default: + { + error_message = "invalid number; expected digit after '-'"; + return token_type::parse_error; + } + } + +scan_number_zero: + // state: we just parse a zero (maybe with a leading minus sign) + switch (get()) + { + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_any1: + // state: we just parsed a number 0-9 (maybe with a leading minus sign) + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_decimal1: + // state: we just parsed a decimal point + number_type = token_type::value_float; + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + default: + { + error_message = "invalid number; expected digit after '.'"; + return token_type::parse_error; + } + } + +scan_number_decimal2: + // we just parsed at least one number after a decimal point + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_exponent: + // we just parsed an exponent + number_type = token_type::value_float; + switch (get()) + { + case '+': + case '-': + { + add(current); + goto scan_number_sign; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = + "invalid number; expected '+', '-', or digit after exponent"; + return token_type::parse_error; + } + } + +scan_number_sign: + // we just parsed an exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = "invalid number; expected digit after exponent sign"; + return token_type::parse_error; + } + } + +scan_number_any2: + // we just parsed a number after the exponent or exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + goto scan_number_done; + } + +scan_number_done: + // unget the character after the number (we only read it to know that + // we are done scanning a number) + unget(); + + char* endptr = nullptr; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + errno = 0; + + // try to parse integers first and fall back to floats + if (number_type == token_type::value_unsigned) + { + const auto x = std::strtoull(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_unsigned = static_cast(x); + if (value_unsigned == x) + { + return token_type::value_unsigned; + } + } + } + else if (number_type == token_type::value_integer) + { + const auto x = std::strtoll(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_integer = static_cast(x); + if (value_integer == x) + { + return token_type::value_integer; + } + } + } + + // this code is reached if we parse a floating-point number or if an + // integer conversion above failed + strtof(value_float, token_buffer.data(), &endptr); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + return token_type::value_float; + } + + /*! + @param[in] literal_text the literal text to expect + @param[in] length the length of the passed literal text + @param[in] return_type the token type to return on success + */ + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, + token_type return_type) + { + JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); + for (std::size_t i = 1; i < length; ++i) + { + if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) + { + error_message = "invalid literal"; + return token_type::parse_error; + } + } + return return_type; + } + + ///////////////////// + // input management + ///////////////////// + + /// reset token_buffer; current character is beginning of token + void reset() noexcept + { + token_buffer.clear(); + token_string.clear(); + token_string.push_back(std::char_traits::to_char_type(current)); + } + + /* + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a + `std::char_traits::eof()` in that case. Stores the scanned characters + for use in error messages. + + @return character read from the input + */ + char_int_type get() + { + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + token_string.push_back(std::char_traits::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; + } + + /*! + @brief unget current character (read it again on next get) + + We implement unget by setting variable next_unget to true. The input is not + changed - we just simulate ungetting by modifying chars_read_total, + chars_read_current_line, and token_string. The next call to get() will + behave as if the unget character is read again. + */ + void unget() + { + next_unget = true; + + --position.chars_read_total; + + // in case we "unget" a newline, we have to also decrement the lines_read + if (position.chars_read_current_line == 0) + { + if (position.lines_read > 0) + { + --position.lines_read; + } + } + else + { + --position.chars_read_current_line; + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + JSON_ASSERT(!token_string.empty()); + token_string.pop_back(); + } + } + + /// add a character to token_buffer + void add(char_int_type c) + { + token_buffer.push_back(static_cast(c)); + } + + public: + ///////////////////// + // value getters + ///////////////////// + + /// return integer value + constexpr number_integer_t get_number_integer() const noexcept + { + return value_integer; + } + + /// return unsigned integer value + constexpr number_unsigned_t get_number_unsigned() const noexcept + { + return value_unsigned; + } + + /// return floating-point value + constexpr number_float_t get_number_float() const noexcept + { + return value_float; + } + + /// return current string value (implicitly resets the token; useful only once) + string_t& get_string() + { + return token_buffer; + } + + ///////////////////// + // diagnostics + ///////////////////// + + /// return position of last read token + constexpr position_t get_position() const noexcept + { + return position; + } + + /// return the last read token (for errors only). Will never contain EOF + /// (an arbitrary value that is not a valid char value, often -1), because + /// 255 may legitimately occur. May contain NUL, which should be escaped. + std::string get_token_string() const + { + // escape control characters + std::string result; + for (const auto c : token_string) + { + if (static_cast(c) <= '\x1F') + { + // escape control characters + std::array cs{{}}; + static_cast((std::snprintf)(cs.data(), cs.size(), "", static_cast(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + result += cs.data(); + } + else + { + // add character as is + result.push_back(static_cast(c)); + } + } + + return result; + } + + /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL + constexpr const char* get_error_message() const noexcept + { + return error_message; + } + + ///////////////////// + // actual scanner + ///////////////////// + + /*! + @brief skip the UTF-8 byte order mark + @return true iff there is no BOM or the correct BOM has been skipped + */ + bool skip_bom() + { + if (get() == 0xEF) + { + // check if we completely parse the BOM + return get() == 0xBB && get() == 0xBF; + } + + // the first character is not the beginning of the BOM; unget it to + // process is later + unget(); + return true; + } + + void skip_whitespace() + { + do + { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + } + + token_type scan() + { + // initially, skip the BOM + if (position.chars_read_total == 0 && !skip_bom()) + { + error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; + return token_type::parse_error; + } + + // read next character and ignore whitespace + skip_whitespace(); + + // ignore comments + while (ignore_comments && current == '/') + { + if (!scan_comment()) + { + return token_type::parse_error; + } + + // skip following whitespace + skip_whitespace(); + } + + switch (current) + { + // structural characters + case '[': + return token_type::begin_array; + case ']': + return token_type::end_array; + case '{': + return token_type::begin_object; + case '}': + return token_type::end_object; + case ':': + return token_type::name_separator; + case ',': + return token_type::value_separator; + + // literals + case 't': + { + std::array true_literal = {{static_cast('t'), static_cast('r'), static_cast('u'), static_cast('e')}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } + case 'f': + { + std::array false_literal = {{static_cast('f'), static_cast('a'), static_cast('l'), static_cast('s'), static_cast('e')}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } + case 'n': + { + std::array null_literal = {{static_cast('n'), static_cast('u'), static_cast('l'), static_cast('l')}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } + + // string + case '\"': + return scan_string(); + + // number + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return scan_number(); + + // end of input (the null byte is needed when parsing from + // string literals) + case '\0': + case std::char_traits::eof(): + return token_type::end_of_input; + + // error + default: + error_message = "invalid literal"; + return token_type::parse_error; + } + } + + private: + /// input adapter + InputAdapterType ia; + + /// whether comments should be ignored (true) or signaled as errors (false) + const bool ignore_comments = false; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// whether the next get() call should just return current + bool next_unget = false; + + /// the start position of the current token + position_t position {}; + + /// raw input token string (for error messages) + std::vector token_string {}; + + /// buffer for variable-length tokens (numbers, strings) + string_t token_buffer {}; + + /// a description of occurred lexer errors + const char* error_message = ""; + + // number values + number_integer_t value_integer = 0; + number_unsigned_t value_unsigned = 0; + number_float_t value_float = 0; + + /// the decimal point + const char_int_type decimal_point_char = '.'; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/parser.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/parser.hpp new file mode 100644 index 0000000..8acbd4f --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/parser.hpp @@ -0,0 +1,507 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // isfinite +#include // uint8_t +#include // function +#include // string +#include // move +#include // vector + +#include +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +//////////// +// parser // +//////////// + +enum class parse_event_t : std::uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template +using parser_callback_t = + std::function; + +/*! +@brief syntax analysis + +This class implements a recursive descent parser. +*/ +template +class parser +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using lexer_t = lexer; + using token_type = typename lexer_t::token_type; + + public: + /// a parser reading from an input adapter + explicit parser(InputAdapterType&& adapter, + const parser_callback_t cb = nullptr, + const bool allow_exceptions_ = true, + const bool skip_comments = false) + : callback(cb) + , m_lexer(std::move(adapter), skip_comments) + , allow_exceptions(allow_exceptions_) + { + // read first token + get_token(); + } + + /*! + @brief public parser interface + + @param[in] strict whether to expect the last token to be EOF + @param[in,out] result parsed JSON value + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + void parse(const bool strict, BasicJsonType& result) + { + if (callback) + { + json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"), nullptr)); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + + // set top-level value to null if it was discarded by the callback + // function + if (result.is_discarded()) + { + result = nullptr; + } + } + else + { + json_sax_dom_parser sdp(result, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + } + + result.assert_invariant(); + } + + /*! + @brief public accept interface + + @param[in] strict whether to expect the last token to be EOF + @return whether the input is a proper JSON text + */ + bool accept(const bool strict = true) + { + json_sax_acceptor sax_acceptor; + return sax_parse(&sax_acceptor, strict); + } + + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse(SAX* sax, const bool strict = true) + { + (void)detail::is_sax_static_asserts {}; + const bool result = sax_parse_internal(sax); + + // strict mode: next byte must be EOF + if (result && strict && (get_token() != token_type::end_of_input)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), nullptr)); + } + + return result; + } + + private: + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse_internal(SAX* sax) + { + // stack to remember the hierarchy of structured values we are parsing + // true = array; false = object + std::vector states; + // value to avoid a goto (see comment where set to true) + bool skip_to_state_evaluation = false; + + while (true) + { + if (!skip_to_state_evaluation) + { + // invariant: get_token() was called before each iteration + switch (last_token) + { + case token_type::begin_object: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(static_cast(-1)))) + { + return false; + } + + // closing } -> we are done + if (get_token() == token_type::end_object) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + break; + } + + // parse key + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); + } + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); + } + + // remember we are now inside an object + states.push_back(false); + + // parse values + get_token(); + continue; + } + + case token_type::begin_array: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(static_cast(-1)))) + { + return false; + } + + // closing ] -> we are done + if (get_token() == token_type::end_array) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + break; + } + + // remember we are now inside an array + states.push_back(true); + + // parse values (no need to call get_token) + continue; + } + + case token_type::value_float: + { + const auto res = m_lexer.get_number_float(); + + if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + out_of_range::create(406, concat("number overflow parsing '", m_lexer.get_token_string(), '\''), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) + { + return false; + } + + break; + } + + case token_type::literal_false: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) + { + return false; + } + break; + } + + case token_type::literal_null: + { + if (JSON_HEDLEY_UNLIKELY(!sax->null())) + { + return false; + } + break; + } + + case token_type::literal_true: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) + { + return false; + } + break; + } + + case token_type::value_integer: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) + { + return false; + } + break; + } + + case token_type::value_string: + { + if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) + { + return false; + } + break; + } + + case token_type::value_unsigned: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) + { + return false; + } + break; + } + + case token_type::parse_error: + { + // using "uninitialized" to avoid "expected" message + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr)); + } + + case token_type::uninitialized: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::end_of_input: + case token_type::literal_or_value: + default: // the last token was unexpected + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr)); + } + } + } + else + { + skip_to_state_evaluation = false; + } + + // we reached this line after we successfully parsed a value + if (states.empty()) + { + // empty stack: we reached the end of the hierarchy: done + return true; + } + + if (states.back()) // array + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse a new value + get_token(); + continue; + } + + // closing ] + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + + // We are done with this array. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), nullptr)); + } + + // states.back() is false -> object + + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse key + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr)); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr)); + } + + // parse values + get_token(); + continue; + } + + // closing } + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + + // We are done with this object. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), nullptr)); + } + } + + /// get next token from lexer + token_type get_token() + { + return last_token = m_lexer.scan(); + } + + std::string exception_message(const token_type expected, const std::string& context) + { + std::string error_msg = "syntax error "; + + if (!context.empty()) + { + error_msg += concat("while parsing ", context, ' '); + } + + error_msg += "- "; + + if (last_token == token_type::parse_error) + { + error_msg += concat(m_lexer.get_error_message(), "; last read: '", + m_lexer.get_token_string(), '\''); + } + else + { + error_msg += concat("unexpected ", lexer_t::token_type_name(last_token)); + } + + if (expected != token_type::uninitialized) + { + error_msg += concat("; expected ", lexer_t::token_type_name(expected)); + } + + return error_msg; + } + + private: + /// callback function + const parser_callback_t callback = nullptr; + /// the type of the last read token + token_type last_token = token_type::uninitialized; + /// the lexer + lexer_t m_lexer; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/position_t.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/position_t.hpp new file mode 100644 index 0000000..396db0e --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/input/position_t.hpp @@ -0,0 +1,37 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // size_t + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/internal_iterator.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/internal_iterator.hpp new file mode 100644 index 0000000..13a212c --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/internal_iterator.hpp @@ -0,0 +1,35 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief an iterator value + +@note This structure could easily be a union, but MSVC currently does not allow +unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. +*/ +template struct internal_iterator +{ + /// iterator for JSON objects + typename BasicJsonType::object_t::iterator object_iterator {}; + /// iterator for JSON arrays + typename BasicJsonType::array_t::iterator array_iterator {}; + /// generic iterator for all other types + primitive_iterator_t primitive_iterator {}; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iter_impl.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iter_impl.hpp new file mode 100644 index 0000000..028de6e --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iter_impl.hpp @@ -0,0 +1,751 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next +#include // conditional, is_const, remove_const + +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// forward declare, to be able to friend it later on +template class iteration_proxy; +template class iteration_proxy_value; + +/*! +@brief a template for a bidirectional iterator for the @ref basic_json class +This class implements a both iterators (iterator and const_iterator) for the +@ref basic_json class. +@note An iterator is called *initialized* when a pointer to a JSON value has + been set (e.g., by a constructor or a copy assignment). If the iterator is + default-constructed, it is *uninitialized* and most methods are undefined. + **The library uses assertions to detect calls on uninitialized iterators.** +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +@since version 1.0.0, simplified in version 2.0.9, change to bidirectional + iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) +*/ +template +class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) +{ + /// the iterator with BasicJsonType of different const-ness + using other_iter_impl = iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; + /// allow basic_json to access private members + friend other_iter_impl; + friend BasicJsonType; + friend iteration_proxy; + friend iteration_proxy_value; + + using object_t = typename BasicJsonType::object_t; + using array_t = typename BasicJsonType::array_t; + // make sure BasicJsonType is basic_json or const basic_json + static_assert(is_basic_json::type>::value, + "iter_impl only accepts (const) basic_json"); + // superficial check for the LegacyBidirectionalIterator named requirement + static_assert(std::is_base_of::value + && std::is_base_of::iterator_category>::value, + "basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement."); + + public: + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; + + /// the type of the values when the iterator is dereferenced + using value_type = typename BasicJsonType::value_type; + /// a type to represent differences between iterators + using difference_type = typename BasicJsonType::difference_type; + /// defines a pointer to the type iterated over (value_type) + using pointer = typename std::conditional::value, + typename BasicJsonType::const_pointer, + typename BasicJsonType::pointer>::type; + /// defines a reference to the type iterated over (value_type) + using reference = + typename std::conditional::value, + typename BasicJsonType::const_reference, + typename BasicJsonType::reference>::type; + + iter_impl() = default; + ~iter_impl() = default; + iter_impl(iter_impl&&) noexcept = default; + iter_impl& operator=(iter_impl&&) noexcept = default; + + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ + explicit iter_impl(pointer object) noexcept : m_object(object) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + m_it.object_iterator = typename object_t::iterator(); + break; + } + + case value_t::array: + { + m_it.array_iterator = typename array_t::iterator(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator = primitive_iterator_t(); + break; + } + } + } + + /*! + @note The conventional copy constructor and copy assignment are implicitly + defined. Combined with the following converting constructor and + assignment, they support: (1) copy from iterator to iterator, (2) + copy from const iterator to const iterator, and (3) conversion from + iterator to const iterator. However conversion from const iterator + to iterator is not defined. + */ + + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl& other) noexcept + { + if (&other != this) + { + m_object = other.m_object; + m_it = other.m_it; + } + return *this; + } + + /*! + @brief converting constructor + @param[in] other non-const iterator to copy from + @note It is not checked whether @a other is initialized. + */ + iter_impl(const iter_impl::type>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other non-const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl::type>& other) noexcept // NOLINT(cert-oop54-cpp) + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_begin() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_data.m_value.object->begin(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_data.m_value.array->begin(); + break; + } + + case value_t::null: + { + // set to end so begin()==end() is true: null is empty + m_it.primitive_iterator.set_end(); + break; + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_begin(); + break; + } + } + } + + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_end() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_data.m_value.object->end(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_data.m_value.array->end(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_end(); + break; + } + } + } + + public: + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator*() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end()); + return m_it.object_iterator->second; + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end()); + return *m_it.array_iterator; + } + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + pointer operator->() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end()); + return &(m_it.object_iterator->second); + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end()); + return &*m_it.array_iterator; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + ++(*this); + return result; + } + + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator++() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, 1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, 1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + ++m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + --(*this); + return result; + } + + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator--() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, -1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, -1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + --m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator==(const IterImpl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + return (m_it.object_iterator == other.m_it.object_iterator); + + case value_t::array: + return (m_it.array_iterator == other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator == other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator!=(const IterImpl& other) const + { + return !operator==(other); + } + + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", m_object)); + + case value_t::array: + return (m_it.array_iterator < other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator < other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<=(const iter_impl& other) const + { + return !other.operator < (*this); + } + + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>(const iter_impl& other) const + { + return !operator<=(other); + } + + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>=(const iter_impl& other) const + { + return !operator<(other); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator+=(difference_type i) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); + + case value_t::array: + { + std::advance(m_it.array_iterator, i); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator += i; + break; + } + } + + return *this; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator-=(difference_type i) + { + return operator+=(-i); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator+(difference_type i) const + { + auto result = *this; + result += i; + return result; + } + + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator-(difference_type i) const + { + auto result = *this; + result -= i; + return result; + } + + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + difference_type operator-(const iter_impl& other) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", m_object)); + + case value_t::array: + return m_it.array_iterator - other.m_it.array_iterator; + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return m_it.primitive_iterator - other.m_it.primitive_iterator; + } + } + + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator[](difference_type n) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_data.m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", m_object)); + + case value_t::array: + return *std::next(m_it.array_iterator, n); + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", m_object)); + } + } + } + + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + const typename object_t::key_type& key() const + { + JSON_ASSERT(m_object != nullptr); + + if (JSON_HEDLEY_LIKELY(m_object->is_object())) + { + return m_it.object_iterator->first; + } + + JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", m_object)); + } + + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference value() const + { + return operator*(); + } + + JSON_PRIVATE_UNLESS_TESTED: + /// associated JSON instance + pointer m_object = nullptr; + /// the actual iterator of the associated instance + internal_iterator::type> m_it {}; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iteration_proxy.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iteration_proxy.hpp new file mode 100644 index 0000000..33bfc36 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iteration_proxy.hpp @@ -0,0 +1,242 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // size_t +#include // input_iterator_tag +#include // string, to_string +#include // tuple_size, get, tuple_element +#include // move + +#if JSON_HAS_RANGES + #include // enable_borrowed_range +#endif + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +void int_to_string( string_type& target, std::size_t value ) +{ + // For ADL + using std::to_string; + target = to_string(value); +} +template class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type *; + using reference = value_type &; + using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; + + private: + /// the iterator + IteratorType anchor{}; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + string_type empty_str{}; + + public: + explicit iteration_proxy_value() = default; + explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) + noexcept(std::is_nothrow_move_constructible::value + && std::is_nothrow_default_constructible::value) + : anchor(std::move(it)) + , array_index(array_index_) + {} + + iteration_proxy_value(iteration_proxy_value const&) = default; + iteration_proxy_value& operator=(iteration_proxy_value const&) = default; + // older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions + iteration_proxy_value(iteration_proxy_value&&) + noexcept(std::is_nothrow_move_constructible::value + && std::is_nothrow_move_constructible::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + iteration_proxy_value& operator=(iteration_proxy_value&&) + noexcept(std::is_nothrow_move_assignable::value + && std::is_nothrow_move_assignable::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~iteration_proxy_value() = default; + + /// dereference operator (needed for range-based for) + const iteration_proxy_value& operator*() const + { + return *this; + } + + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() + { + ++anchor; + ++array_index; + + return *this; + } + + iteration_proxy_value operator++(int)& // NOLINT(cert-dcl21-cpp) + { + auto tmp = iteration_proxy_value(anchor, array_index); + ++anchor; + ++array_index; + return tmp; + } + + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } +}; + +/// proxy class for the items() function +template class iteration_proxy +{ + private: + /// the container to iterate + typename IteratorType::pointer container = nullptr; + + public: + explicit iteration_proxy() = default; + + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(&cont) {} + + iteration_proxy(iteration_proxy const&) = default; + iteration_proxy& operator=(iteration_proxy const&) = default; + iteration_proxy(iteration_proxy&&) noexcept = default; + iteration_proxy& operator=(iteration_proxy&&) noexcept = default; + ~iteration_proxy() = default; + + /// return iterator begin (needed for range-based for) + iteration_proxy_value begin() const noexcept + { + return iteration_proxy_value(container->begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value end() const noexcept + { + return iteration_proxy_value(container->end()); + } +}; + +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) +{ + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) +{ + return i.value(); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ + +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template +class tuple_size<::nlohmann::detail::iteration_proxy_value> // NOLINT(cert-dcl58-cpp) + : public std::integral_constant {}; + +template +class tuple_element> // NOLINT(cert-dcl58-cpp) +{ + public: + using type = decltype( + get(std::declval < + ::nlohmann::detail::iteration_proxy_value> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +} // namespace std + +#if JSON_HAS_RANGES + template + inline constexpr bool ::std::ranges::enable_borrowed_range<::nlohmann::detail::iteration_proxy> = true; +#endif diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iterator_traits.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iterator_traits.hpp new file mode 100644 index 0000000..34a20ee --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/iterator_traits.hpp @@ -0,0 +1,61 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // random_access_iterator_tag + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/json_reverse_iterator.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/json_reverse_iterator.hpp new file mode 100644 index 0000000..eb450e9 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/json_reverse_iterator.hpp @@ -0,0 +1,130 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // ptrdiff_t +#include // reverse_iterator +#include // declval + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +////////////////////// +// reverse_iterator // +////////////////////// + +/*! +@brief a template for a reverse iterator class + +@tparam Base the base iterator type to reverse. Valid types are @ref +iterator (to create @ref reverse_iterator) and @ref const_iterator (to +create @ref const_reverse_iterator). + +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): + It is possible to write to the pointed-to element (only if @a Base is + @ref iterator). + +@since version 1.0.0 +*/ +template +class json_reverse_iterator : public std::reverse_iterator +{ + public: + using difference_type = std::ptrdiff_t; + /// shortcut to the reverse iterator adapter + using base_iterator = std::reverse_iterator; + /// the reference type for the pointed-to element + using reference = typename Base::reference; + + /// create reverse iterator from iterator + explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept + : base_iterator(it) {} + + /// create reverse iterator from base class + explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} + + /// post-increment (it++) + json_reverse_iterator operator++(int)& // NOLINT(cert-dcl21-cpp) + { + return static_cast(base_iterator::operator++(1)); + } + + /// pre-increment (++it) + json_reverse_iterator& operator++() + { + return static_cast(base_iterator::operator++()); + } + + /// post-decrement (it--) + json_reverse_iterator operator--(int)& // NOLINT(cert-dcl21-cpp) + { + return static_cast(base_iterator::operator--(1)); + } + + /// pre-decrement (--it) + json_reverse_iterator& operator--() + { + return static_cast(base_iterator::operator--()); + } + + /// add to iterator + json_reverse_iterator& operator+=(difference_type i) + { + return static_cast(base_iterator::operator+=(i)); + } + + /// add to iterator + json_reverse_iterator operator+(difference_type i) const + { + return static_cast(base_iterator::operator+(i)); + } + + /// subtract from iterator + json_reverse_iterator operator-(difference_type i) const + { + return static_cast(base_iterator::operator-(i)); + } + + /// return difference + difference_type operator-(const json_reverse_iterator& other) const + { + return base_iterator(*this) - base_iterator(other); + } + + /// access to successor + reference operator[](difference_type n) const + { + return *(this->operator+(n)); + } + + /// return the key of an object iterator + auto key() const -> decltype(std::declval().key()) + { + auto it = --this->base(); + return it.key(); + } + + /// return the value of an iterator + reference value() const + { + auto it = --this->base(); + return it.operator * (); + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/primitive_iterator.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/primitive_iterator.hpp new file mode 100644 index 0000000..0bc3ca8 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/iterators/primitive_iterator.hpp @@ -0,0 +1,132 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // ptrdiff_t +#include // numeric_limits + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/* +@brief an iterator for primitive JSON types + +This class models an iterator for primitive JSON types (boolean, number, +string). It's only purpose is to allow the iterator/const_iterator classes +to "iterate" over primitive values. Internally, the iterator is modeled by +a `difference_type` variable. Value begin_value (`0`) models the begin, +end_value (`1`) models past the end. +*/ +class primitive_iterator_t +{ + private: + using difference_type = std::ptrdiff_t; + static constexpr difference_type begin_value = 0; + static constexpr difference_type end_value = begin_value + 1; + + JSON_PRIVATE_UNLESS_TESTED: + /// iterator as signed integer type + difference_type m_it = (std::numeric_limits::min)(); + + public: + constexpr difference_type get_value() const noexcept + { + return m_it; + } + + /// set iterator to a defined beginning + void set_begin() noexcept + { + m_it = begin_value; + } + + /// set iterator to a defined past the end + void set_end() noexcept + { + m_it = end_value; + } + + /// return whether the iterator can be dereferenced + constexpr bool is_begin() const noexcept + { + return m_it == begin_value; + } + + /// return whether the iterator is at end + constexpr bool is_end() const noexcept + { + return m_it == end_value; + } + + friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it == rhs.m_it; + } + + friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it < rhs.m_it; + } + + primitive_iterator_t operator+(difference_type n) noexcept + { + auto result = *this; + result += n; + return result; + } + + friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it - rhs.m_it; + } + + primitive_iterator_t& operator++() noexcept + { + ++m_it; + return *this; + } + + primitive_iterator_t operator++(int)& noexcept // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + ++m_it; + return result; + } + + primitive_iterator_t& operator--() noexcept + { + --m_it; + return *this; + } + + primitive_iterator_t operator--(int)& noexcept // NOLINT(cert-dcl21-cpp) + { + auto result = *this; + --m_it; + return result; + } + + primitive_iterator_t& operator+=(difference_type n) noexcept + { + m_it += n; + return *this; + } + + primitive_iterator_t& operator-=(difference_type n) noexcept + { + m_it -= n; + return *this; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_custom_base_class.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_custom_base_class.hpp new file mode 100644 index 0000000..ff06653 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_custom_base_class.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include // conditional, is_same + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief Default base class of the @ref basic_json class. + +So that the correct implementations of the copy / move ctors / assign operators +of @ref basic_json do not require complex case distinctions +(no base class / custom base class used as customization point), +@ref basic_json always has a base class. +By default, this class is used because it is empty and thus has no effect +on the behavior of @ref basic_json. +*/ +struct json_default_base {}; + +template +using json_base_class = typename std::conditional < + std::is_same::value, + json_default_base, + T + >::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_pointer.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_pointer.hpp new file mode 100644 index 0000000..eb712ed --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_pointer.hpp @@ -0,0 +1,988 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // all_of +#include // isdigit +#include // errno, ERANGE +#include // strtoull +#ifndef JSON_NO_IO + #include // ostream +#endif // JSON_NO_IO +#include // max +#include // accumulate +#include // string +#include // move +#include // vector + +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document +/// @sa https://json.nlohmann.me/api/json_pointer/ +template +class json_pointer +{ + // allow basic_json to access private members + NLOHMANN_BASIC_JSON_TPL_DECLARATION + friend class basic_json; + + template + friend class json_pointer; + + template + struct string_t_helper + { + using type = T; + }; + + NLOHMANN_BASIC_JSON_TPL_DECLARATION + struct string_t_helper + { + using type = StringType; + }; + + public: + // for backwards compatibility accept BasicJsonType + using string_t = typename string_t_helper::type; + + /// @brief create JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/json_pointer/ + explicit json_pointer(const string_t& s = "") + : reference_tokens(split(s)) + {} + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/to_string/ + string_t to_string() const + { + return std::accumulate(reference_tokens.begin(), reference_tokens.end(), + string_t{}, + [](const string_t& a, const string_t& b) + { + return detail::concat(a, '/', detail::escape(b)); + }); + } + + /// @brief return a string representation of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_string/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.0, to_string()) + operator string_t() const + { + return to_string(); + } + +#ifndef JSON_NO_IO + /// @brief write string representation of the JSON pointer to stream + /// @sa https://json.nlohmann.me/api/basic_json/operator_ltlt/ + friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr) + { + o << ptr.to_string(); + return o; + } +#endif + + /// @brief append another JSON pointer at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(const json_pointer& ptr) + { + reference_tokens.insert(reference_tokens.end(), + ptr.reference_tokens.begin(), + ptr.reference_tokens.end()); + return *this; + } + + /// @brief append an unescaped reference token at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(string_t token) + { + push_back(std::move(token)); + return *this; + } + + /// @brief append an array index at the end of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/ + json_pointer& operator/=(std::size_t array_idx) + { + return *this /= std::to_string(array_idx); + } + + /// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, + const json_pointer& rhs) + { + return json_pointer(lhs) /= rhs; + } + + /// @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, string_t token) // NOLINT(performance-unnecessary-value-param) + { + return json_pointer(lhs) /= std::move(token); + } + + /// @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/ + friend json_pointer operator/(const json_pointer& lhs, std::size_t array_idx) + { + return json_pointer(lhs) /= array_idx; + } + + /// @brief returns the parent of this JSON pointer + /// @sa https://json.nlohmann.me/api/json_pointer/parent_pointer/ + json_pointer parent_pointer() const + { + if (empty()) + { + return *this; + } + + json_pointer res = *this; + res.pop_back(); + return res; + } + + /// @brief remove last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/pop_back/ + void pop_back() + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + reference_tokens.pop_back(); + } + + /// @brief return last reference token + /// @sa https://json.nlohmann.me/api/json_pointer/back/ + const string_t& back() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + return reference_tokens.back(); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(const string_t& token) + { + reference_tokens.push_back(token); + } + + /// @brief append an unescaped token at the end of the reference pointer + /// @sa https://json.nlohmann.me/api/json_pointer/push_back/ + void push_back(string_t&& token) + { + reference_tokens.push_back(std::move(token)); + } + + /// @brief return whether pointer points to the root document + /// @sa https://json.nlohmann.me/api/json_pointer/empty/ + bool empty() const noexcept + { + return reference_tokens.empty(); + } + + private: + /*! + @param[in] s reference token to be converted into an array index + + @return integer representation of @a s + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index begins not with a digit + @throw out_of_range.404 if string @a s could not be converted to an integer + @throw out_of_range.410 if an array index exceeds size_type + */ + template + static typename BasicJsonType::size_type array_index(const string_t& s) + { + using size_type = typename BasicJsonType::size_type; + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, detail::concat("array index '", s, "' must not begin with '0'"), nullptr)); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, detail::concat("array index '", s, "' is not a number"), nullptr)); + } + + const char* p = s.c_str(); + char* p_end = nullptr; + errno = 0; // strtoull doesn't reset errno + const unsigned long long res = std::strtoull(p, &p_end, 10); // NOLINT(runtime/int) + if (p == p_end // invalid input or empty string + || errno == ERANGE // out of range + || JSON_HEDLEY_UNLIKELY(static_cast(p_end - p) != s.size())) // incomplete read + { + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", s, "'"), nullptr)); + } + + // only triggered on special platforms (like 32bit), see also + // https://github.com/nlohmann/json/pull/2203 + if (res >= static_cast((std::numeric_limits::max)())) // NOLINT(runtime/int) + { + JSON_THROW(detail::out_of_range::create(410, detail::concat("array index ", s, " exceeds size_type"), nullptr)); // LCOV_EXCL_LINE + } + + return static_cast(res); + } + + JSON_PRIVATE_UNLESS_TESTED: + json_pointer top() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", nullptr)); + } + + json_pointer result = *this; + result.reference_tokens = {reference_tokens[0]}; + return result; + } + + private: + /*! + @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. + + @throw parse_error.109 if array index is not a number + @throw type_error.313 if value cannot be unflattened + */ + template + BasicJsonType& get_and_create(BasicJsonType& j) const + { + auto* result = &j; + + // in case no reference tokens exist, return a reference to the JSON value + // j which will be overwritten by a primitive value + for (const auto& reference_token : reference_tokens) + { + switch (result->type()) + { + case detail::value_t::null: + { + if (reference_token == "0") + { + // start a new array if reference token is 0 + result = &result->operator[](0); + } + else + { + // start a new object otherwise + result = &result->operator[](reference_token); + } + break; + } + + case detail::value_t::object: + { + // create an entry in the object + result = &result->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + // create an entry in the array + result = &result->operator[](array_index(reference_token)); + break; + } + + /* + The following code is only reached if there exists a reference + token _and_ the current value is primitive. In this case, we have + an error situation, because primitive values may only occur as + single value; that is, with an empty list of reference tokens. + */ + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", &j)); + } + } + + return *result; + } + + /*! + @brief return a reference to the pointed to value + + @note This version does not throw if a value is not present, but tries to + create nested values instead. For instance, calling this function + with pointer `"/this/that"` on a null value is equivalent to calling + `operator[]("this").operator[]("that")` on that value, effectively + changing the null value to an object. + + @param[in] ptr a JSON value + + @return reference to the JSON value pointed to by the JSON pointer + + @complexity Linear in the length of the JSON pointer. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + BasicJsonType& get_unchecked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + // convert null values to arrays or objects before continuing + if (ptr->is_null()) + { + // check if reference token is a number + const bool nums = + std::all_of(reference_token.begin(), reference_token.end(), + [](const unsigned char x) + { + return std::isdigit(x); + }); + + // change value to array for numbers or "-" or to object otherwise + *ptr = (nums || reference_token == "-") + ? detail::value_t::array + : detail::value_t::object; + } + + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (reference_token == "-") + { + // explicitly treat "-" as index beyond the end + ptr = &ptr->operator[](ptr->m_data.m_value.array->size()); + } + else + { + // convert array index to number; unchecked access + ptr = &ptr->operator[](array_index(reference_token)); + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + BasicJsonType& get_checked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, detail::concat( + "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), + ") is out of range"), ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @brief return a const reference to the pointed to value + + @param[in] ptr a JSON value + + @return const reference to the JSON value pointed to by the JSON + pointer + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" cannot be used for const access + JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr)); + } + + // use unchecked array access + ptr = &ptr->operator[](array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + template + const BasicJsonType& get_checked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, detail::concat( + "array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), + ") is out of range"), ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, detail::concat("unresolved reference token '", reference_token, "'"), ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + template + bool contains(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (!ptr->contains(reference_token)) + { + // we did not find the key in the object + return false; + } + + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) + { + if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } + } + + const auto idx = array_index(reference_token); + if (idx >= ptr->size()) + { + // index out of range + return false; + } + + ptr = &ptr->operator[](idx); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } + } + } + + // no reference token left means we found a primitive value + return true; + } + + /*! + @brief split the string input to reference tokens + + @note This function is only called by the json_pointer constructor. + All exceptions below are documented there. + + @throw parse_error.107 if the pointer is not empty or begins with '/' + @throw parse_error.108 if character '~' is not followed by '0' or '1' + */ + static std::vector split(const string_t& reference_string) + { + std::vector result; + + // special case: empty reference string -> no reference tokens + if (reference_string.empty()) + { + return result; + } + + // check if nonempty reference string begins with slash + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) + { + JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr)); + } + + // extract the reference tokens: + // - slash: position of the last read slash (or end of string) + // - start: position after the previous slash + for ( + // search for the first slash after the first character + std::size_t slash = reference_string.find_first_of('/', 1), + // set the beginning of the first reference token + start = 1; + // we can stop if start == 0 (if slash == string_t::npos) + start != 0; + // set the beginning of the next reference token + // (will eventually be 0 if slash == string_t::npos) + start = (slash == string_t::npos) ? 0 : slash + 1, + // find next slash + slash = reference_string.find_first_of('/', start)) + { + // use the text between the beginning of the reference token + // (start) and the last slash (slash). + auto reference_token = reference_string.substr(start, slash - start); + + // check reference tokens are properly escaped + for (std::size_t pos = reference_token.find_first_of('~'); + pos != string_t::npos; + pos = reference_token.find_first_of('~', pos + 1)) + { + JSON_ASSERT(reference_token[pos] == '~'); + + // ~ must be followed by 0 or 1 + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || + (reference_token[pos + 1] != '0' && + reference_token[pos + 1] != '1'))) + { + JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr)); + } + } + + // finally, store the reference token + detail::unescape(reference_token); + result.push_back(reference_token); + } + + return result; + } + + private: + /*! + @param[in] reference_string the reference string to the current value + @param[in] value the value to consider + @param[in,out] result the result object to insert values to + + @note Empty objects or arrays are flattened to `null`. + */ + template + static void flatten(const string_t& reference_string, + const BasicJsonType& value, + BasicJsonType& result) + { + switch (value.type()) + { + case detail::value_t::array: + { + if (value.m_data.m_value.array->empty()) + { + // flatten empty array as null + result[reference_string] = nullptr; + } + else + { + // iterate array and use index as reference string + for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i) + { + flatten(detail::concat(reference_string, '/', std::to_string(i)), + value.m_data.m_value.array->operator[](i), result); + } + } + break; + } + + case detail::value_t::object: + { + if (value.m_data.m_value.object->empty()) + { + // flatten empty object as null + result[reference_string] = nullptr; + } + else + { + // iterate object and use keys as reference string + for (const auto& element : *value.m_data.m_value.object) + { + flatten(detail::concat(reference_string, '/', detail::escape(element.first)), element.second, result); + } + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // add primitive value with its reference string + result[reference_string] = value; + break; + } + } + } + + /*! + @param[in] value flattened JSON + + @return unflattened JSON + + @throw parse_error.109 if array index is not a number + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + @throw type_error.313 if value cannot be unflattened + */ + template + static BasicJsonType + unflatten(const BasicJsonType& value) + { + if (JSON_HEDLEY_UNLIKELY(!value.is_object())) + { + JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", &value)); + } + + BasicJsonType result; + + // iterate the JSON object values + for (const auto& element : *value.m_data.m_value.object) + { + if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) + { + JSON_THROW(detail::type_error::create(315, "values in object must be primitive", &element.second)); + } + + // assign value to reference pointed to by JSON pointer; Note that if + // the JSON pointer is "" (i.e., points to the whole value), function + // get_and_create returns a reference to result itself. An assignment + // will then create a primitive value. + json_pointer(element.first).get_and_create(result) = element.second; + } + + return result; + } + + // can't use conversion operator because of ambiguity + json_pointer convert() const& + { + json_pointer result; + result.reference_tokens = reference_tokens; + return result; + } + + json_pointer convert()&& + { + json_pointer result; + result.reference_tokens = std::move(reference_tokens); + return result; + } + + public: +#if JSON_HAS_THREE_WAY_COMPARISON + /// @brief compares two JSON pointers for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + bool operator==(const json_pointer& rhs) const noexcept + { + return reference_tokens == rhs.reference_tokens; + } + + /// @brief compares JSON pointer and string for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer)) + bool operator==(const string_t& rhs) const + { + return *this == json_pointer(rhs); + } + + /// @brief 3-way compares two JSON pointers + template + std::strong_ordering operator<=>(const json_pointer& rhs) const noexcept // *NOPAD* + { + return reference_tokens <=> rhs.reference_tokens; // *NOPAD* + } +#else + /// @brief compares two JSON pointers for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const json_pointer& lhs, + const json_pointer& rhs) noexcept; + + /// @brief compares JSON pointer and string for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const json_pointer& lhs, + const StringType& rhs); + + /// @brief compares string and JSON pointer for equality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator==(const StringType& lhs, + const json_pointer& rhs); + + /// @brief compares two JSON pointers for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const json_pointer& lhs, + const json_pointer& rhs) noexcept; + + /// @brief compares JSON pointer and string for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const json_pointer& lhs, + const StringType& rhs); + + /// @brief compares string and JSON pointer for inequality + /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/ + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator!=(const StringType& lhs, + const json_pointer& rhs); + + /// @brief compares two JSON pointer for less-than + template + // NOLINTNEXTLINE(readability-redundant-declaration) + friend bool operator<(const json_pointer& lhs, + const json_pointer& rhs) noexcept; +#endif + + private: + /// the reference tokens + std::vector reference_tokens; +}; + +#if !JSON_HAS_THREE_WAY_COMPARISON +// functions cannot be defined inside class due to ODR violations +template +inline bool operator==(const json_pointer& lhs, + const json_pointer& rhs) noexcept +{ + return lhs.reference_tokens == rhs.reference_tokens; +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) +inline bool operator==(const json_pointer& lhs, + const StringType& rhs) +{ + return lhs == json_pointer(rhs); +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer)) +inline bool operator==(const StringType& lhs, + const json_pointer& rhs) +{ + return json_pointer(lhs) == rhs; +} + +template +inline bool operator!=(const json_pointer& lhs, + const json_pointer& rhs) noexcept +{ + return !(lhs == rhs); +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) +inline bool operator!=(const json_pointer& lhs, + const StringType& rhs) +{ + return !(lhs == rhs); +} + +template::string_t> +JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer)) +inline bool operator!=(const StringType& lhs, + const json_pointer& rhs) +{ + return !(lhs == rhs); +} + +template +inline bool operator<(const json_pointer& lhs, + const json_pointer& rhs) noexcept +{ + return lhs.reference_tokens < rhs.reference_tokens; +} +#endif + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_ref.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_ref.hpp new file mode 100644 index 0000000..47911fb --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/json_ref.hpp @@ -0,0 +1,78 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +class json_ref +{ + public: + using value_type = BasicJsonType; + + json_ref(value_type&& value) + : owned_value(std::move(value)) + {} + + json_ref(const value_type& value) + : value_ref(&value) + {} + + json_ref(std::initializer_list init) + : owned_value(init) + {} + + template < + class... Args, + enable_if_t::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward(args)...) + {} + + // class should be movable only + json_ref(json_ref&&) noexcept = default; + json_ref(const json_ref&) = delete; + json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; + + value_type moved_or_copied() const + { + if (value_ref == nullptr) + { + return std::move(owned_value); + } + return *value_ref; + } + + value_type const& operator*() const + { + return value_ref ? *value_ref : owned_value; + } + + value_type const* operator->() const + { + return &** this; + } + + private: + mutable value_type owned_value = nullptr; + value_type const* value_ref = nullptr; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_scope.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_scope.hpp new file mode 100644 index 0000000..2870a4f --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_scope.hpp @@ -0,0 +1,469 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // declval, pair +#include +#include + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +#include + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_unscope.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_unscope.hpp new file mode 100644 index 0000000..4a871f0 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/macro_unscope.hpp @@ -0,0 +1,44 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +// restore clang diagnostic settings +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +// clean up +#undef JSON_ASSERT +#undef JSON_INTERNAL_CATCH +#undef JSON_THROW +#undef JSON_PRIVATE_UNLESS_TESTED +#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION +#undef NLOHMANN_BASIC_JSON_TPL +#undef JSON_EXPLICIT +#undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL +#undef JSON_INLINE_VARIABLE +#undef JSON_NO_UNIQUE_ADDRESS +#undef JSON_DISABLE_ENUM_SERIALIZATION +#undef JSON_USE_GLOBAL_UDLS + +#ifndef JSON_TEST_KEEP_MACROS + #undef JSON_CATCH + #undef JSON_TRY + #undef JSON_HAS_CPP_11 + #undef JSON_HAS_CPP_14 + #undef JSON_HAS_CPP_17 + #undef JSON_HAS_CPP_20 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #undef JSON_HAS_THREE_WAY_COMPARISON + #undef JSON_HAS_RANGES + #undef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#include diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/begin.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/begin.hpp new file mode 100644 index 0000000..27d36c6 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/begin.hpp @@ -0,0 +1,17 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/end.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/end.hpp new file mode 100644 index 0000000..d10bf83 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/call_std/end.hpp @@ -0,0 +1,17 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/cpp_future.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/cpp_future.hpp new file mode 100644 index 0000000..22f2514 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/cpp_future.hpp @@ -0,0 +1,171 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + +#pragma once + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +inline constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/detected.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/detected.hpp new file mode 100644 index 0000000..b2f6db9 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/detected.hpp @@ -0,0 +1,70 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/identity_tag.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/identity_tag.hpp new file mode 100644 index 0000000..71164f2 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/identity_tag.hpp @@ -0,0 +1,21 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// dispatching helper struct +template struct identity_tag {}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/is_sax.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/is_sax.hpp new file mode 100644 index 0000000..2150089 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/is_sax.hpp @@ -0,0 +1,159 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // size_t +#include // declval +#include // string + +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using null_function_t = decltype(std::declval().null()); + +template +using boolean_function_t = + decltype(std::declval().boolean(std::declval())); + +template +using number_integer_function_t = + decltype(std::declval().number_integer(std::declval())); + +template +using number_unsigned_function_t = + decltype(std::declval().number_unsigned(std::declval())); + +template +using number_float_function_t = decltype(std::declval().number_float( + std::declval(), std::declval())); + +template +using string_function_t = + decltype(std::declval().string(std::declval())); + +template +using binary_function_t = + decltype(std::declval().binary(std::declval())); + +template +using start_object_function_t = + decltype(std::declval().start_object(std::declval())); + +template +using key_function_t = + decltype(std::declval().key(std::declval())); + +template +using end_object_function_t = decltype(std::declval().end_object()); + +template +using start_array_function_t = + decltype(std::declval().start_array(std::declval())); + +template +using end_array_function_t = decltype(std::declval().end_array()); + +template +using parse_error_function_t = decltype(std::declval().parse_error( + std::declval(), std::declval(), + std::declval())); + +template +struct is_sax +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static constexpr bool value = + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value; +}; + +template +struct is_sax_static_asserts +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static_assert(is_detected_exact::value, + "Missing/invalid function: bool null()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_integer(number_integer_t)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool string(string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool binary(binary_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_object(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool key(string_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_object()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_array(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_array()"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool parse_error(std::size_t, const " + "std::string&, const exception&)"); +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/std_fs.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/std_fs.hpp new file mode 100644 index 0000000..c096158 --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/std_fs.hpp @@ -0,0 +1,29 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +#if JSON_HAS_EXPERIMENTAL_FILESYSTEM +#include +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +namespace std_fs = std::experimental::filesystem; +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END +#elif JSON_HAS_FILESYSTEM +#include +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ +namespace std_fs = std::filesystem; +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END +#endif diff --git a/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/type_traits.hpp b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/type_traits.hpp new file mode 100644 index 0000000..cfc7e5a --- /dev/null +++ b/deploy/robot_ws/src/go2py_node/include/nlohmann/detail/meta/type_traits.hpp @@ -0,0 +1,740 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.11.2 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann +// SPDX-License-Identifier: MIT + +#pragma once + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple + +#include +#include +#include +#include +#include +#include +#include + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template

Y+6lS6KS>QX$xHl}xz2p$m5h~{Q_=Sk1K8>g>+!GS`wsIa`h75IV-K4d zZ0t5fKXK@?#xAukZJRkVW$k4H|AX9!Co$mB^WX^ji9;`=A3O9a`jJDQML$gF1)7q6 z9H5u4QIjwGwA5td+OwTsoV@=0kA2+w=47~!97ubA@VfZP2LC9nG65(adUHgmhY4|z*KE42Nr|>oSRSMsOXa3e7{|w%j!h3&@eLIB@ z!v{TF>RN^m!ISf)iXJ5N0Q*@Tuf{d?HuFCA%+tbV8sCl3CVqx`b^MuU58HEWFGE}B zGtW6TJ7?~*Xnb5xd#j(tlbc#c_FkX)Fu4&gxpoK98xB2>K9|rX-+9`ZMOS-w>r)SV z?_QMl&i(UjUD}1)^I7`0t99SreF|U1&$stx_L!?FdC3O~V`T zAdJy<|6EAnIegYMUkd%z+28kWQtEVs{R!`($@NkI;J)y2QLd&!A6o%~*Esan}7P`$s&Z zC46NJbLe^WQs~=tKN^Ei!hQFn8TcyPUcWLv^I9Jc<3{(R7W$?mk4^Lqbjiu=wf6n! z5Wb%9lh{M(Yv}5J^yp8f-j4<_D*vEDFbefOg}d>TJJ-_<%Y z?;^y%39qH_P55jIKZG|@cpJWu!n1$E=N}#}>opHwh9~#dG4y6a53rxo@zVCz1#FJ- z-N4?=iRiZ)5@-EQY^$G2-&>Ec$^VOcZ{J#cJFB zPSYH`_uu_}Yr!*c-+5yjJ`B%W@$KJ&IEEMC^896LXWlDHu2=9PT=%R0`L~Dfkg|vD z>*&6k=iw9Zz=~^XDn1jMyV@0A*YSP+P0eS+_-bC5zb6!*P51`w7ed~3PnI^0u-U`L zb&nBk1b!fWl=o~;Ka+c-{r5K4@6a!9r4JQscRsD(T|Z9Qnl@v9%RlyiI0s-?4)ap$ z-~LQ_2Ht<=9uLWR5uSy+au&W0AA|>1e7o-Zn)~X04i8fN`~EECzWj6WvL`>ud7k*= z@Z5E3`j3AjH4Xpf`wsb=@9Xb2pN~lXv&0(z&-5{DVKa@5^xe!~bIz3*+wduPDde3o zk#9lqnVaM^fXzHM`CG{82fK3m1Cvu0+rE!52G`nM``3`x^|+|>x#UzpZ(%=WwQv4z zRd@w{0-p)Fn#bn-l<+xt?z*41;InYOKGl3O`+b1_HhclT7sfZAbMTo%_`M0~(}}ck zOFOnViSH%)F#1I3>)d+>kJtyWan)b-A3l-7EAVl+v}eZ8%vaIoG*8Q61)GK^hUBoL zxogf#8z=C2{0m%@gP9}IX9p4^^HIhT8$G_N&h~k92)+t;wITi`_*zPiQ<|5<9J=;} zdH8{+eaY#VJ{-Z-y88D|q^_$2VjbO@-rqJh7uZPdW?bxbmHl(xCBxI!RgD;Zk7$SM z>PA;iv2`^?yzFh=>uOHxGEd1veZ~@S*+lQhK5brXVN=A$)d$gz;Dr=^2_J<^d!`2V z+#LA7Ay3PpfX%cghU8Gu+%<2c-8uLS{spdmb8`iod2D=ha|gZ%ceNoooWPe-a_l({ zxo>U;@GVdKlG7~lci?Jn{@!1v&dnKO?L0cYzf0I0VKW%kM6DHjZf?L2;c0WT51TeN zYR|89I%)Yo8St;4QeXmTU0+MBIQ_JLr4p zRV%Lg{;`$QDK?pb?)qGz_c-+IUs1P2Te6;V=$GgVVO#Ofqxq35^Br92?vSlqq`Y-ygB z!!b6;o;D;e>BlL&#&zbe|6KORPJiW1n*O_sp;N~GDehdP)+Np5ni$bJu7W;{Us{e0 zY>L=O%}gE4o+{c3ya0FAX$XEvA4+i5hiAI`5MXykoJH*HHP4tuf3G3A_x&~R7O=7V zA=g9b8wp+VDWI>T-)ucdp3;xr&(e9m@1x#YFA;Mby8s_k4}07p zpMv{pItHIHx&FtIGgry4@Hf;8yR@2Cu{p*jS<_kcql7N`ETJEwKa`qEKSrLaYx+ue zo>GHTV$NbGIlF3_`P-1E)pQt}C1Ut$T81yeeKlPnho;H(4?g0p=@M~{u}iDzCN`PD z__;vpyRUV-){@U4dJp#5YxuoXwQYZI_1X42kp45)N+Na+_bM?&pOhG1q+-O*9QQuv zI!A->4j}DM5~u%j;yFs~YFZDtPL74}r4%lCY-qj|`lo*GAbFf%Un38@CUSj=K9kS` z^!~qN?V!tkLVjjHjD4<<$7U0ogU}}RbA>9llb_p8{TzHAn_SQ~?+w*i+kS7j3ZH;W z|4q%lQJ>#rZ`p-c;R_+R-($*MS+;R?zB`2{PLl!CA-gz zRoLeMenN~nY<<6ZAvT$Rpnjk4UvtuzVQdz#8RgoHf&JM{8NLFy=Z*Qzj{uix_yv4C z^f&V=`fU$sV-cIdFL2jOYOoF;f)9i-qVM_dYP}NbY8=ex3<26Hyo#URQ%u{@y-(Wi zJ*R)z$hGO8eIFi%&wIG!R)#m=_E-hzRrERZ64%64xpCi({!Ufeo5!YwjcXoByjA$R zBlb4>8v0lm+u5%ZY!0yT^{eL}**D?kFh{? zpDpqeuKvB9fBI9I%l3W}`?veniM92#^z+mKHV4?a`YY`X!}sCp-`n{a)t-589Q(KX z#DDPrv3GuvJ9puQ6fSL5G_P|_zw9-7@2#>*t$%-D0oyIw%7wOS9LydkZLPs~Q*zl$ z;WCHLG*8aYo_}IbByM7UM*qIG*biZIf{pE~`j38$-oS?bsrhGqcT;RD@WOE1Pv+4& zxs0MOah-YIfsDCX7qP!#YT>_vT@^cQR88#9gSRCwcwlj}e@cGGDO~okE6v-Xzy6;2 zbCW;N`{R$Qf9&J`*ZQWp#2&ribJ?dy>qg~o?pe~uC1UTuYg}jE@F&jmj>KsYr}vBf zeOS?4Y)uW!z9j8j(oP2dRjxBnR_&NtzS4XSB6b0B8rZ3PdffR0*!6#s=V|Qpo?>D} zd!@|J8Dd>vqs~IRe=L1VJqt|{b08Prwi+ zXZK7E=)c@HXcS4u> zoWq93)rZ=@hK`+>fYEO=Ej$I z?~Th^*R{6yme}67gI)hu#K%zje1zVIuKm0A#!Gk|F8wk!F?ARJfqzZsqbXeKJgIp- zjBn@PwKvXVyG<^>v(GAgFD2LA6dut2sph3H7c+-qdt>h%`uJt95hNhrMfjia7nx^7mn0bE&tPi}o4kn0ET`Uj=7A_4{@$V|!zU zI1AXRd_J!1%rj9_&fD@LARtB?y94Ze>saQ%z`t|0!p5Etay^3HPUte<%jg&AdcAq~ zMu}0!cI>OV*ZeMdiLUbhGI#z`qfPvq*acjhdYL&P+M(u!kem4)+cPh*Sto|8=AsRJ znt2JAzL_@cJ+p@YhROBE{-<;716-@bxx~&_YiVm9n_x8hd`^v-`Fu`dtitQ?3fJV) z8B_jM9rL-<9yaUP$lAju`rG0Y^eyzfm@*O?FeuFQLtC;tZN zo6Yl<^lOq>D_-sBhzr&b;kHD+6 zP2XeV7a%RdYj9uvr9KX9_#^Tx>qF7VeGWdrF*L>?&a{svYxwRCwkZA8LHPyB(>~5c~>%RWIxF z%>w!*x*jjn$7sDs>?$?`#GVV=RyG`9Z?&a{U2FUd-hZdN9hslKw_fY%gWGd8Ko8J+(Mw@m z)5mCyOOA8I9>zxHc>Y1}`kNuv0d}KdtgiL92tVtz6wCnto*;$i;DafA3_g(3{tSE=?whZ>#Q% zb9CQ)J%?wXlRjVjA9<~(hK(ynX=4OF2Y1y_=E4GP%)-@NxcW`I53%_=OPt`j{`tBL zufSdHNWZt>lW@BR0r~;@1bW(h&0$l=M&^0jI{pp#Dc70Y zmOa+7`8q|MLODKGlK&j~D7tUHw%}EG16%GdW{hI{>kc;C*tl|(HcsGsa90hb52Ns1 zxS9)Z`3<`dvH3duC~EzU{`p#lufbjI$Q+%9ufmh_wSm5ZuIG^HV{CstCdVCYRE{UV zE;$;z*nHh5*7WoJ^Yt9wfa|up=4;=h$q_DfG52$GR+fI{;A`-};`W($O!H#M)&6du zTf}dT9CnEzW1jhZ)fbhAxvxq)P2!w++7Z5~xo=$^!Y@+%+bLZ7F8vUHRquEFnq6<% z9n{%X#<9?Mt!McKQ9aaeIZJ*M=qnvv_0QBv{OXz~pH&vMuJ;2~KXcv^zjgQqaqT%I z*SqNJ4*eK?Eul+(ZS>WY{IZV;x!sQV<m~a{8(r$P6}FfB4%M{%JI4}d=yvw`vF^MJTHg-ibiJ>r zzz^`NhFp!Od0!!M=ivQ!#m6&1Z=(01SGhKIw7=6VHQBrkhM&;g|5{H@Wv-;RBClUxf!;o4vrE!=suf$8ucjt~o4mYw-P)c9-C7xY(L@ z?dR?d_yxRTar;^J0G|71x4(@21$-F(P{v+z2>6G_Hazi!7vbx0Up`g%na5x9X~0h( zMm`(Z&y2hKC;1$}r{TVQF5s&v{{4?*jl+HSfDyR(2ef6z$IJ`S#x*Z;4R_uH*2!Uq z80sD{vLX9x*F9jFIH#U=q@P=w`|bfp@beV^%M>0Ef8g<<{|49OXYRM`4c7jT&Fr^C zwdm~s=#7rvwV%~B_tm%wpZEAnZkw7Hx%Sn#ADb0os2U&qlC#EF*z9`Rks1#^A>_Uq z7vTFT{*@FieV2ZS|0&m*5tXC!UFs@v7QVH+&fDlq9X(cOwf}1_*VHNce7lXlh@Y)X zAN%-%u(Y!f+Iv64k=$#^MFXrB?H&zhu$Rbu8|808+zF@QHTFK}&*W$d$> zRcuPcka*ar81|mH3opW5<0QEb!pm@#>))1zw#^CJH}Y8yTb_toVXJ_HYlW$I@3D#`0g^L)trU%<^#Vr8F1J@Fe2b+z{G_k?-) zB)l5(*nM66C*aF)sh6pvImZdF!`I+4HYP7~&X&BI@O8L-ZxwxA>vD}>^mit^I^KAw zo4qRf_tT`!Gi(ltDc7b=dk*zJnX^g?ABOLHctFT9d=H+M!wfcUY+UnH@>+yn!CiF` zz7FsCHureSy)>h_`uBOh-~%$xQ~!;%E9?he65j`;o$LVbNzf}?n_Agtj68fCF1Ci7 zT1wxfA7gO!@AF(&c{u-l9vR05v1%`m=OFqr`b{Idhb)1bLb_miEHLi^c*UE&0({TjjJvadko(DUGct%-xPWVUB_1Ym;GLS z9zLA#lXxxkp@bfwZ=wh2HLk5(`mv_DtS__X?0dx?d?UsGEQL$or61yd z%5~;Xe^zod^C9*wYlI)nnR#VYkLb)-Mz44DSe@iPutI#{>b}`f@o#$HY!P$wRq^|P z)M8WXa&2m1_8*yJhwu&je?cY;Y;AObo7wPvFdI?>}?%Gq1;L`~|iE)8GmCyt9-p^s3qo?gD zIc(NDZJN0r+f&A|*~cbrPpMNclRoXD_ayW@`Z4+y@gDA; zlKouzNj%s55-ks3^KiKjPrz5#WuMuRrg9=G{Z&OL61IIGx5Op}Lc zNAg(I+_%TA!`D;%_fxp^UHT#Zr(9>UDo5uYm;F4}&UZ(7MtfWiz1GpY_PBZC3s-yG z@BO4Yf8Ffaph3)yneIJqS?f|4Q!9Iq+k&s-XYUJgeSp4}(53HZ=&R`UFrIgh>;HWA zvV_0H9Y#M-=mB~W{S3Vn#&zy-Q`q#r&OLu6_B^}C+neRU%#)hq}j2V?SK;x3>Tvf>(%b z=DWSet--4){(JC>hfDp=;FEB! zdhnIjs2(l&34GX!Z=ZR$;b(B^tI5yaBah*yaJw#Y-PUn!UHVu;KgRxo>&#cQ>~Wqo z<19Y;FJf)HDLxKr{IxFUU6YUf-eU&7iC@*?=JOEoUxc^eg^;UyvGGLpScmuD?f*XQ zK70u7tJgU^2j33kt9#$;toVJy>}&9<)xMoy4&Gaj?u)VepVVbcb9;VDzoxXV>!SK) z*JU0)kP>%Qb3G5E?>29v58)?mn0lM>7ws4xcz6K6f)B!HxW?byyP|*ZL~MembC1Dh zHncJ41^HKL)woEl=ZLd~O`Yq^ZSRlf&7C)Tn~%Kb5z%{z0A3?r&zqxrkg5fr5l7GN zQpYAXW7x}Pp!MpEJyX@JH@eew~qhD zTjTwaTz9qZn_s8!9sB}p%{(#ZPRS+nB_U7FuR-*E{CxE&!1p{{+N!{J;lBALb7za( z`o34soyT?h?wUL6#GAmjh9CWK&Yc5nRvru`zjB;Yu=n*bfG?-;BD@Lr zjd@l3+wF?&2Kk7e8uO>!=NM;VZd$_bU4zIz}#(bT&x3H;WpZThLqrSVwe1&*DbLnHgi_I7|$uU3Hx?OweR~x;I zy|0hiFXKF(!t?MV+&AVE+TU(hY*%Sl{M4Ag;GU@8$#veuzxQqN{z$ItTKA3lK70Vb z09)6XpKG2R^UO22kKpI4#}GX5aA~UqAB3lk`3h}MVWYz!G@bmF4cpmN>vm^KjeA4QV{cn6;!l&WMxzPVi);D?(`gNUgMl?_M zvy5KD&(8_&-&pq)2e750j_-yEJ&SuR=%IS>1 zb(FC_uOGG6w(ntLC~+juibGIymP!|!14k@0<=vX6e-OFoB|Q>wIkM!Pfbbk7sv zy?OeT!iV8g@G`b$EbVz(hA+a$L$2y({-#RCe}(q9;c6cK&U+u$JX|IA(7W98P-0&Z zdls%@f6v2<-Sd^KpC5F`mbnqY^Y4zYYtcv1M-sZ!aU4B|?wcPq9j}P3siVEmF2N`8 zcirQp-3|CuqFvGV(5vVJVch7qp-!~!%ctjAjC)GH0lWs6zLBpQSM!V|?H1uPj(jF{ zT(Q9~dZ$-Im;8PCEa`Z~&`;g_?D}lL7xDMi=K$VvGY3={(%+W>|dgdXkHAtIh#38k5dTZAGcQp&cJ3eY3Anz01Yga3`=Kb$=(B)P^kzqo zZ^t|P3f3LX&AB88|tf1%7CoDhOjQ$>1`qRK>3L9U4 zSK!qYz5}nogRqU*IEZ$ld0GycucfA*7?RhJ=B_m(ZIs|k_!qb~dj#)vV&7q##%2v0 z-+W$xZ@^t`NDgc8&6FJXG?z7J=8e7H&fv$M_9dqx{1mQ!EB!kbWX*d2?UsB2+r{+$ zPGWO~jcZ&3+M9)6!b@CRHH&_eL~=SLr-2_~-pTu}2j88{=?}tH8ouk=BVMo+-`^$1 ziPl?TJMps=XI^ub3gCTT$2bzh_Z%nldjy*!Z0xx%eJrCNqAzf5`eVKi6Ch2)3qKk? zk96KOa!8WBMq(^tQ^Q8=%@~?JQQBMA+-_TJchP6?o97xo6Fd40Lt>v{vyY8jo7iSw z36Offo_AUBsgRo(&0D#-nEZ0s^!`|MFH~#I+zaLYI0g^k1Dr)^V<-G~%N@Tb_qO=& z$w_|}@V&yBAO!8(qfO^vC{e;7G?ShP>+>aS0#1;Xg+Vd;{k=cru?6 z^kMXYFm80tDr?=B&oq1lKdBS>s(eiCq(2MrGTb#jqOHM8aNqv0r~LzLO+C!q5$#O# zBG;z<6iS4(N=eXv+I@I7xDgH|-T>38k5dTZA zGf!1HI`7*@#Hlu;Jfr*e1^RSH@5;ab*&%n0gY;(}2 za<5+YKNIHRS8%&-ay^EAnb2h{r_kHzzBMtg;}x+rYtw$_S%nY2&%amg!gKIsKF8?8 z=mTNgXs>E(-Iq_c#9oD;9+$4YDi1HiU28=vWi|r2j27YOK)hRapE%$tt7@6m> zSHaWvs$p!#u+eKmGJC{NM0<1KUFR1Y7uA3GDtsaAzvA}Uu?_G0>8@w**moQU#yC@8Qx9X9dBx8(b=GkK zn>lQXRy)c2bQPOrZ1m>>CJyE9#F@ut7aKhu#wOYi0^+Y>b9NJ(eQf$xqjzKGUK@Q^ zN8(&yQ^lq?d`4C0_d9Mp>g{$u*}Iq@KjY6?*3>9AHEiUXag5$?kE73^yXJssHTX0< z2>rVDgQc7B4b5G1Ut%7>C9jDvzNuxjA4m>uY*w)G&i`-XT>#uW|KW%5uKBNZSKrnA zr`-em)cpU@TTclBLj4a0ZvQ)6(~n{PS>!8q$~ z%|8Z3`1sFvkHIAR7`iJD(PrUgc)+!543=-gw>0;S!4X{YN*jYKY#P}3#$fPUI9tJe zV^Dx^!joe#p>i=&zvnJ?%=m_mg?}>*+YEl_%Fe$TxXuH`l0rlJ8wLqdFwqHZrPoG zduWNkM&J*+<|A-qw|=`(f&N^1l|jG#aG%3LtZ2n?W_37 zdsu}SL&T7IlDX?mGG3}3`^-=#PTA9rl~(HE?|%vnnMQiQL;edAh%Z@_*1Zot<){*u=Ud=oC$)J>f; z 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