Viam C++ SDK current
Loading...
Searching...
No Matches
client.hpp
Go to the documentation of this file.
1
4#pragma once
5
6#include <atomic>
7#include <string>
8#include <thread>
9
10#include <viam/sdk/common/grpc_fwd.hpp>
11#include <viam/sdk/common/pose.hpp>
12#include <viam/sdk/common/utils.hpp>
13#include <viam/sdk/common/world_state.hpp>
14#include <viam/sdk/components/component.hpp>
16#include <viam/sdk/resource/resource.hpp>
17#include <viam/sdk/rpc/dial.hpp>
18#include <viam/sdk/services/service.hpp>
19
20namespace viam {
21namespace sdk {
22
24
36 public:
40 enum class status : uint8_t {
41 k_initializing,
42 k_running,
43 k_unspecified,
44 };
45
46 friend std::ostream& operator<<(std::ostream& os, const status& v);
47
50 ProtoStruct kinematics;
51 friend bool operator==(const frame_system_config& lhs, const frame_system_config& rhs);
52 };
53
54 struct operation {
55 std::string id;
56 std::string method;
57 boost::optional<std::string> session_id;
58 ProtoStruct arguments;
59 boost::optional<time_pt> started;
60 friend bool operator==(const operation& lhs, const operation& rhs);
61 };
62
64 void refresh();
65 void close();
66
70 static std::shared_ptr<RobotClient> at_address(const std::string& address,
71 const Options& options);
72
78 static std::shared_ptr<RobotClient> at_local_socket(const std::string& address,
79 const Options& options);
80
86 static std::shared_ptr<RobotClient> with_channel(std::shared_ptr<ViamChannel> channel,
87 const Options& options);
88 RobotClient(std::shared_ptr<ViamChannel> channel);
89 std::vector<Name> resource_names() const;
90
102 std::shared_ptr<Resource> resource_by_name(const Name& name);
103
104 template <typename T>
109 std::shared_ptr<T> resource_by_name(std::string name) {
110 return std::dynamic_pointer_cast<T>(resource_by_name({API::get<T>(), "", std::move(name)}));
111 }
112
115 std::vector<frame_system_config> get_frame_system_config(
116 const std::vector<WorldState::transform>& additional_transforms = {});
117
120 std::vector<operation> get_operations();
121
127 const pose_in_frame& query,
128 std::string destination,
129 const std::vector<WorldState::transform>& additional_transforms = {});
130
133 void block_for_operation(std::string id);
134
136 void stop_all();
137
140 void stop_all(const std::unordered_map<Name, ProtoStruct>& extra);
141
144 void cancel_operation(std::string id);
145
148
149 private:
150 void refresh_every();
151
152 std::vector<std::shared_ptr<std::thread>> threads_;
153
154 std::atomic<bool> should_refresh_;
155 unsigned int refresh_interval_;
156
157 std::shared_ptr<GrpcChannel> channel_;
158 std::shared_ptr<ViamChannel> viam_channel_;
159 bool should_close_channel_;
160
161 struct impl;
162 std::unique_ptr<impl> impl_;
163
164 mutable std::mutex lock_;
165
166 std::vector<Name> resource_names_;
167 ResourceManager resource_manager_;
168};
169
170} // namespace sdk
171} // namespace viam
A name for specific instances of resources.
Definition resource_api.hpp:61
Definition dial.hpp:106
Defines a resource manager for use by anything that tracks resources.
Definition resource_manager.hpp:22
gRPC client for a robot, to be used for all interactions with a robot. There are two ways to instanti...
Definition client.hpp:35
static std::shared_ptr< RobotClient > at_local_socket(const std::string &address, const Options &options)
Creates a robot client connected to the robot at the provided local socket.
static std::shared_ptr< RobotClient > with_channel(std::shared_ptr< ViamChannel > channel, const Options &options)
Creates a robot client connected to the provided channel.
std::shared_ptr< Resource > resource_by_name(const Name &name)
Lookup and return a shared_ptr to a resource.
pose_in_frame transform_pose(const pose_in_frame &query, std::string destination, const std::vector< WorldState::transform > &additional_transforms={})
Transform a given Pose to a new specified destination which is a reference frame.
std::vector< frame_system_config > get_frame_system_config(const std::vector< WorldState::transform > &additional_transforms={})
Get the configuration of the frame system of the given robot.
void stop_all()
Cancel all operations for the robot and stop all actuators and movement.
static std::shared_ptr< RobotClient > at_address(const std::string &address, const Options &options)
Create a robot client connected to the robot at the provided address.
void block_for_operation(std::string id)
Blocks on the specified operation of the robot, returning when it is complete.
void cancel_operation(std::string id)
Cancel a specified operation on the robot.
std::vector< operation > get_operations()
Get the list of operations currently running on a robot.
std::shared_ptr< T > resource_by_name(std::string name)
Lookup and return a shared_ptr to a resource of the requested type.
Definition client.hpp:109
void stop_all(const std::unordered_map< Name, ProtoStruct > &extra)
Cancel all operations for the robot and stop all actuators and movement.
status get_machine_status() const
gets the current status of the machine
status
the current status of the robot
Definition client.hpp:40
Defines the resource registry and associated types.
Definition client.hpp:54
Definition world_state.hpp:32
Definition pose.hpp:39