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