Viam C++ SDK current
Loading...
Searching...
No Matches
kinematics.hpp
1#pragma once
2
3#include <boost/variant/variant.hpp>
4#include <map>
5#include <string>
6#include <vector>
7
8#include <viam/sdk/common/mesh.hpp>
9#include <viam/sdk/common/proto_convert.hpp>
10#include <viam/sdk/common/proto_value.hpp>
11
12namespace viam {
13namespace common {
14namespace v1 {
15class GetKinematicsResponse;
16}
17} // namespace common
18} // namespace viam
19
20namespace viam {
21namespace sdk {
22
23// Base class for use below in defining kinematics data strong typedefs
24template <class Tag>
25struct raw_bytes {
26 // Pre c++17 our derived classes aren't aggregate initializable so we need to define
27 // and using declare some ctors
28
29 raw_bytes() = default;
30 raw_bytes(std::vector<unsigned char> b) : bytes(std::move(b)) {}
31
32 std::vector<unsigned char> bytes{};
33};
34
35// Comparison operator helper for the data types below
36template <class DataType>
37struct EqCompare {
38 inline friend bool operator==(const DataType& lhs, const DataType& rhs) {
39 return lhs.bytes == rhs.bytes;
40 }
41};
42
44struct KinematicsDataUnspecified : raw_bytes<KinematicsDataUnspecified>,
45 EqCompare<KinematicsDataUnspecified> {};
46
48struct KinematicsDataSVA : raw_bytes<KinematicsDataSVA>, EqCompare<KinematicsDataSVA> {
49 using raw_bytes<KinematicsDataSVA>::raw_bytes;
50};
51
53struct KinematicsDataURDF : raw_bytes<KinematicsDataURDF> {
54 using raw_bytes<KinematicsDataURDF>::raw_bytes;
55 std::map<std::string, mesh> meshes_by_urdf_filepath;
56
57 friend bool operator==(const KinematicsDataURDF& lhs, const KinematicsDataURDF& rhs);
58};
59
62using KinematicsData =
63 boost::variant<KinematicsDataUnspecified, KinematicsDataSVA, KinematicsDataURDF>;
64
65namespace proto_convert_details {
66
67template <>
68struct to_proto_impl<KinematicsData> {
69 void operator()(const KinematicsData&, common::v1::GetKinematicsResponse*) const;
70};
71
72template <>
73struct from_proto_impl<common::v1::GetKinematicsResponse> {
74 KinematicsData operator()(const common::v1::GetKinematicsResponse*) const;
75};
76
77} // namespace proto_convert_details
78} // namespace sdk
79} // namespace viam
Definition kinematics.hpp:37
Kinematics data in Viam's Spatial Vector Algebra (SVA) format.
Definition kinematics.hpp:48
Kinematics data in URDF format with optional meshes by URDF filepath.
Definition kinematics.hpp:53
Kinematics data with unspecified format.
Definition kinematics.hpp:45
Definition kinematics.hpp:25