rby1-sdk
Loading...
Searching...
No Matches
robot_command_builder.h
1#pragma once
2
3#include <memory>
4#include <optional>
5
6#include "Eigen/Core"
7#include "dynamics/inertial.h"
8#include "export.h"
9#include "math/liegroup.h"
10
11namespace rb {
12
13class CommandHeaderBuilderImpl;
14class JointPositionCommandBuilderImpl;
15class JointGroupPositionCommandBuilderImpl;
16class JointImpedanceControlCommandBuilderImpl;
17class OptimalControlCommandBuilderImpl;
18class GravityCompensationCommandBuilderImpl;
19class CartesianCommandBuilderImpl;
20class CartesianImpedanceControlCommandBuilderImpl;
21class ImpedanceControlCommandBuilderImpl;
22class JointVelocityCommandBuilderImpl;
23class JogCommandBuilderImpl;
24class SE2VelocityCommandBuilderImpl;
25class StopCommandBuilderImpl;
26class RealTimeControlCommandBuilderImpl;
27class ArmCommandBuilderImpl;
28class TorsoCommandBuilderImpl;
29class BodyComponentBasedCommandBuilderImpl;
30class BodyCommandBuilderImpl;
31class MobilityCommandBuilderImpl;
32class HeadCommandBuilderImpl;
33class ComponentBasedCommandBuilderImpl;
34class WholeBodyCommandBuilderImpl;
35class RobotCommandBuilderImpl;
36
37class RBY1_SDK_API CommandHeaderBuilder {
38 public:
40
42
43 CommandHeaderBuilder& SetControlHoldTime(double control_hold_time);
44
45 private:
46 [[nodiscard]] void* Build() const;
47
48 private:
49 std::unique_ptr<CommandHeaderBuilderImpl> impl_;
50
51 friend class GravityCompensationCommandBuilderImpl;
52 friend class JointPositionCommandBuilderImpl;
53 friend class JointGroupPositionCommandBuilderImpl;
54 friend class JointImpedanceControlCommandBuilderImpl;
55 friend class CartesianCommandBuilderImpl;
56 friend class CartesianImpedanceControlCommandBuilderImpl;
57 friend class OptimalControlCommandBuilderImpl;
58 friend class ImpedanceControlCommandBuilderImpl;
59 friend class JointVelocityCommandBuilderImpl;
60 friend class StopCommandBuilderImpl;
61 friend class SE2VelocityCommandBuilderImpl;
62 friend class JogCommandBuilderImpl;
63};
64
65class RBY1_SDK_API JointPositionCommandBuilder {
66 public:
68
70
71 JointPositionCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
72
73 JointPositionCommandBuilder& SetMinimumTime(double minimum_time);
74
75 JointPositionCommandBuilder& SetPosition(const Eigen::VectorXd& position);
76
77 JointPositionCommandBuilder& SetVelocityLimit(const Eigen::VectorXd& velocity_limit);
78
79 JointPositionCommandBuilder& SetAccelerationLimit(const Eigen::VectorXd& acceleration_limit);
80
81 private:
82 [[nodiscard]] void* Build() const;
83
84 private:
85 std::unique_ptr<JointPositionCommandBuilderImpl> impl_;
86
87 friend class ArmCommandBuilderImpl;
88 friend class TorsoCommandBuilderImpl;
89 friend class BodyCommandBuilderImpl;
90 friend class HeadCommandBuilderImpl;
91};
92
94 public:
96
98
99 JointGroupPositionCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
100
101 JointGroupPositionCommandBuilder& SetJointNames(const std::vector<std::string>& joint_names);
102
103 JointGroupPositionCommandBuilder& SetMinimumTime(double minimum_time);
104
105 JointGroupPositionCommandBuilder& SetPosition(const Eigen::VectorXd& position);
106
107 JointGroupPositionCommandBuilder& SetVelocityLimit(const Eigen::VectorXd& velocity_limit);
108
109 JointGroupPositionCommandBuilder& SetAccelerationLimit(const Eigen::VectorXd& acceleration_limit);
110
111 private:
112 [[nodiscard]] void* Build() const;
113
114 private:
115 std::unique_ptr<JointGroupPositionCommandBuilderImpl> impl_;
116
117 friend class TorsoCommandBuilderImpl;
118};
119
121 public:
123
125
126 JointImpedanceControlCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
127
128 JointImpedanceControlCommandBuilder& SetMinimumTime(double minimum_time);
129
130 JointImpedanceControlCommandBuilder& SetPosition(const Eigen::VectorXd& position);
131
132 JointImpedanceControlCommandBuilder& SetVelocityLimit(const Eigen::VectorXd& velocity_limit);
133
134 JointImpedanceControlCommandBuilder& SetAccelerationLimit(const Eigen::VectorXd& acceleration_limit);
135
136 JointImpedanceControlCommandBuilder& SetStiffness(const Eigen::VectorXd& stiffness);
137
138 JointImpedanceControlCommandBuilder& SetTorqueLimit(const Eigen::VectorXd& torque_limit);
139
140 JointImpedanceControlCommandBuilder& SetDampingRatio(double damping_ratio);
141
142 private:
143 [[nodiscard]] void* Build() const;
144
145 private:
146 std::unique_ptr<JointImpedanceControlCommandBuilderImpl> impl_;
147
148 friend class ArmCommandBuilderImpl;
149 friend class TorsoCommandBuilderImpl;
150 friend class BodyCommandBuilderImpl;
151 friend class HeadCommandBuilderImpl;
152};
153
155 public:
157
159
160 OptimalControlCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
161
162 OptimalControlCommandBuilder& AddCartesianTarget(const std::string& ref_link_name, //
163 const std::string& link_name, //
164 const math::SE3::MatrixType& T, //
165 double translation_weight, //
166 double rotation_weight //
167 );
168
169 OptimalControlCommandBuilder& SetCenterOfMassTarget(const std::string& ref_link_name, //
170 const Eigen::Vector3d& pose, //
171 double weight //
172 );
173
174 OptimalControlCommandBuilder& AddJointPositionTarget(const std::string& joint_name, //
175 double target_position, //
176 double weight //
177 );
178
179 OptimalControlCommandBuilder& SetErrorScaling(double error_scaling);
180
181 OptimalControlCommandBuilder& SetVelocityLimitScaling(double velocity_limit_scaling);
182
183 OptimalControlCommandBuilder& SetAccelerationLimitScaling(double acceleration_limit_scaling);
184
185 OptimalControlCommandBuilder& SetStopCost(double stop_cost);
186
187 OptimalControlCommandBuilder& SetMinDeltaCost(double min_delta_cost);
188
189 OptimalControlCommandBuilder& SetPatience(int patience);
190
191 private:
192 [[nodiscard]] void* Build() const;
193
194 private:
195 std::unique_ptr<OptimalControlCommandBuilderImpl> impl_;
196
197 friend class TorsoCommandBuilderImpl;
198 friend class BodyCommandBuilderImpl;
199};
200
202 public:
204
206
207 ImpedanceControlCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
208
209 ImpedanceControlCommandBuilder& SetReferenceLinkName(const std::string& name);
210
211 ImpedanceControlCommandBuilder& SetLinkName(const std::string& name);
212
213 ImpedanceControlCommandBuilder& SetTransformation(const math::SE3::MatrixType& T);
214
215 ImpedanceControlCommandBuilder& SetTranslationWeight(const Eigen::Vector3d& weight);
216
217 ImpedanceControlCommandBuilder& SetRotationWeight(const Eigen::Vector3d& weight);
218
219 ImpedanceControlCommandBuilder& SetDampingRatio(double damping_ratio);
220
221 private:
222 [[nodiscard]] void* Build() const;
223
224 private:
225 std::unique_ptr<ImpedanceControlCommandBuilderImpl> impl_;
226
227 friend class ArmCommandBuilderImpl;
228 friend class TorsoCommandBuilderImpl;
229};
230
231class RBY1_SDK_API JointVelocityCommandBuilder {
232 public:
234
236
237 JointVelocityCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
238
239 JointVelocityCommandBuilder& SetMinimumTime(double minimum_time);
240
241 JointVelocityCommandBuilder& SetVelocity(const Eigen::VectorXd& velocity);
242
243 JointVelocityCommandBuilder& SetAccelerationLimit(const Eigen::VectorXd& acceleration_limit);
244
245 private:
246 [[nodiscard]] void* Build() const;
247
248 private:
249 std::unique_ptr<JointVelocityCommandBuilderImpl> impl_;
250
251 friend class MobilityCommandBuilderImpl;
252};
253
254class RBY1_SDK_API JogCommandBuilder {
255 public:
256 class RBY1_SDK_API AbsolutePosition {
257 public:
258 explicit AbsolutePosition(double value) : value_(value) {}
259
260 double value() const { return value_; }
261
262 private:
263 double value_{};
264 };
265
266 class RBY1_SDK_API RelativePosition {
267 public:
268 explicit RelativePosition(double value) : value_(value) {}
269
270 double value() const { return value_; }
271
272 private:
273 double value_{};
274 };
275
276 class RBY1_SDK_API OneStep {
277 public:
278 explicit OneStep(bool direction) : value_(direction) {}
279
280 bool value() const { return value_; }
281
282 private:
283 bool value_{};
284 };
285
287
289
290 JogCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
291
292 JogCommandBuilder& SetJointName(const std::string& name);
293
294 JogCommandBuilder& SetVelocityLimit(double value);
295
296 JogCommandBuilder& SetAccelerationLimit(double value);
297
298 JogCommandBuilder& SetCommand(AbsolutePosition absolute_position);
299
300 JogCommandBuilder& SetCommand(RelativePosition relative_position);
301
302 JogCommandBuilder& SetCommand(OneStep one_step);
303
304 private:
305 [[nodiscard]] void* Build() const;
306
307 private:
308 std::unique_ptr<JogCommandBuilderImpl> impl_;
309
310 friend class RobotCommandBuilderImpl;
311};
312
313class RBY1_SDK_API SE2VelocityCommandBuilder {
314 public:
316
318
319 SE2VelocityCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
320
321 SE2VelocityCommandBuilder& SetMinimumTime(double minimum_time);
322
323 SE2VelocityCommandBuilder& SetVelocity(const Eigen::Vector2d& linear, double angular);
324
325 SE2VelocityCommandBuilder& SetAccelerationLimit(const Eigen::Vector2d& linear, double angular);
326
327 private:
328 [[nodiscard]] void* Build() const;
329
330 private:
331 std::unique_ptr<SE2VelocityCommandBuilderImpl> impl_;
332
333 friend class MobilityCommandBuilderImpl;
334};
335
336class RBY1_SDK_API StopCommandBuilder {
337 public:
339
341
342 StopCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
343
344 private:
345 [[nodiscard]] void* Build() const;
346
347 private:
348 std::unique_ptr<StopCommandBuilderImpl> impl_;
349
350 friend class WholeBodyCommandBuilderImpl;
351};
352
354 public:
356
358
359 RealTimeControlCommandBuilder& SetPort(int port);
360
361 private:
362 [[nodiscard]] void* Build() const;
363
364 private:
365 std::unique_ptr<RealTimeControlCommandBuilderImpl> impl_;
366
367 friend class WholeBodyCommandBuilderImpl;
368};
369
370class RBY1_SDK_API CartesianCommandBuilder {
371 public:
373
375
376 CartesianCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
377
378 CartesianCommandBuilder& SetMinimumTime(double minium_time);
379
380 CartesianCommandBuilder& AddTarget(const std::string& ref_link_name, //
381 const std::string& link_name, //
382 const math::SE3::MatrixType& T, // Eigen::Matrix<double, 4, 4>
383 double linear_velocity_limit, // (m/s)
384 double angular_velocity_limit, // (rad/s)
385 double acceleration_limit_scaling = 1. // (0, 1]
386 );
387
388 CartesianCommandBuilder& AddJointPositionTarget(const std::string& joint_name, //
389 double target_position, //
390 std::optional<double> velocity_limit = std::nullopt, //
391 std::optional<double> acceleration_limit = std::nullopt //
392 );
393
394 CartesianCommandBuilder& SetStopPositionTrackingError(double stop_position_tracking_error);
395
396 CartesianCommandBuilder& SetStopOrientationTrackingError(double stop_orientation_tracking_error);
397
398 CartesianCommandBuilder& SetStopJointPositionTrackingError(double stop_joint_position_tracking_error);
399
400 private:
401 [[nodiscard]] void* Build() const;
402
403 private:
404 std::unique_ptr<CartesianCommandBuilderImpl> impl_;
405
406 friend class ArmCommandBuilderImpl;
407 friend class TorsoCommandBuilderImpl;
408 friend class BodyCommandBuilderImpl;
409};
410
412 public:
414
416
417 CartesianImpedanceControlCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
418
419 CartesianImpedanceControlCommandBuilder& SetMinimumTime(double minium_time);
420
422 const std::string& ref_link_name, //
423 const std::string& link_name, //
424 const math::SE3::MatrixType& T, // Eigen::Matrix<double, 4, 4>
425 std::optional<double> linear_velocity_limit = std::nullopt, // (m/s)
426 std::optional<double> angular_velocity_limit = std::nullopt, // (rad/s)
427 std::optional<double> linear_acceleration_limit = std::nullopt, //
428 std::optional<double> angular_acceleration_limit = std::nullopt //
429 );
430
431 CartesianImpedanceControlCommandBuilder& AddJointPositionTarget(
432 const std::string& joint_name, //
433 double target_position, //
434 std::optional<double> velocity_limit = std::nullopt, //
435 std::optional<double> acceleration_limit = std::nullopt //
436 );
437
438 CartesianImpedanceControlCommandBuilder& SetNullspaceJointTarget(
439 const Eigen::VectorXd& target_position, //
440 const Eigen::VectorXd& weight, //
441 std::optional<double> k_p = std::nullopt, //
442 std::optional<double> k_d = std::nullopt, //
443 std::optional<double> cost_weight = std::nullopt //
444 );
445
446 CartesianImpedanceControlCommandBuilder& SetStopPositionTrackingError(double stop_position_tracking_error);
447
448 CartesianImpedanceControlCommandBuilder& SetStopOrientationTrackingError(double stop_orientation_tracking_error);
449
450 CartesianImpedanceControlCommandBuilder& SetStopJointPositionTrackingError(double stop_joint_position_tracking_error);
451
452 CartesianImpedanceControlCommandBuilder& SetJointStiffness(const Eigen::VectorXd& stiffness);
453
454 CartesianImpedanceControlCommandBuilder& SetJointDampingRatio(double damping_ratio);
455
456 CartesianImpedanceControlCommandBuilder& SetJointTorqueLimit(const Eigen::VectorXd& torque_limit);
457
458 CartesianImpedanceControlCommandBuilder& AddJointLimit(const std::string& joint_name, double lower, double upper);
459
460 CartesianImpedanceControlCommandBuilder& SetResetReference(bool reset_reference);
461
462 private:
463 [[nodiscard]] void* Build() const;
464
465 private:
466 std::unique_ptr<CartesianImpedanceControlCommandBuilderImpl> impl_;
467
468 friend class ArmCommandBuilderImpl;
469 friend class TorsoCommandBuilderImpl;
470 friend class BodyCommandBuilderImpl;
471};
472
474 public:
476
478
479 GravityCompensationCommandBuilder& SetCommandHeader(const CommandHeaderBuilder& builder);
480
481 GravityCompensationCommandBuilder& SetOn(bool on);
482
483 private:
484 [[nodiscard]] void* Build() const;
485
486 private:
487 std::unique_ptr<GravityCompensationCommandBuilderImpl> impl_;
488
489 friend class BodyCommandBuilderImpl;
490 friend class ArmCommandBuilderImpl;
491 friend class TorsoCommandBuilderImpl;
492};
493
494class RBY1_SDK_API ArmCommandBuilder {
495 public:
497
499
501
503
505
507
509
511
512 ArmCommandBuilder& SetCommand(const JointPositionCommandBuilder& builder);
513
514 ArmCommandBuilder& SetCommand(const GravityCompensationCommandBuilder& builder);
515
516 ArmCommandBuilder& SetCommand(const CartesianCommandBuilder& builder);
517
518 ArmCommandBuilder& SetCommand(const ImpedanceControlCommandBuilder& builder);
519
520 ArmCommandBuilder& SetCommand(const JointImpedanceControlCommandBuilder& builder);
521
523
524 private:
525 [[nodiscard]] void* Build() const;
526
527 private:
528 std::unique_ptr<ArmCommandBuilderImpl> impl_;
529
530 friend class BodyComponentBasedCommandBuilderImpl;
531};
532
533class RBY1_SDK_API TorsoCommandBuilder {
534 public:
536
538
540
542
544
546
548
550
552
554
555 TorsoCommandBuilder& SetCommand(const JointPositionCommandBuilder& builder);
556
557 TorsoCommandBuilder& SetCommand(const GravityCompensationCommandBuilder& builder);
558
559 TorsoCommandBuilder& SetCommand(const CartesianCommandBuilder& builder);
560
561 TorsoCommandBuilder& SetCommand(const ImpedanceControlCommandBuilder& builder);
562
563 TorsoCommandBuilder& SetCommand(const OptimalControlCommandBuilder& builder);
564
566
568
569 TorsoCommandBuilder& SetCommand(const JointGroupPositionCommandBuilder& builder);
570
571 private:
572 [[nodiscard]] void* Build() const;
573
574 private:
575 std::unique_ptr<TorsoCommandBuilderImpl> impl_;
576
577 friend class BodyComponentBasedCommandBuilderImpl;
578};
579
581 public:
583
585
586 BodyComponentBasedCommandBuilder& SetRightArmCommand(const ArmCommandBuilder& builder);
587
588 BodyComponentBasedCommandBuilder& SetLeftArmCommand(const ArmCommandBuilder& builder);
589
590 BodyComponentBasedCommandBuilder& SetTorsoCommand(const TorsoCommandBuilder& builder);
591
592 private:
593 [[nodiscard]] void* Build() const;
594
595 private:
596 std::unique_ptr<BodyComponentBasedCommandBuilderImpl> impl_;
597
598 friend class BodyCommandBuilderImpl;
599};
600
601class RBY1_SDK_API BodyCommandBuilder {
602 public:
604
606
608
610
612
614
616
618
620
621 BodyCommandBuilder& SetCommand(const JointPositionCommandBuilder& builder);
622
623 BodyCommandBuilder& SetCommand(const OptimalControlCommandBuilder& builder);
624
625 BodyCommandBuilder& SetCommand(const GravityCompensationCommandBuilder& builder);
626
627 BodyCommandBuilder& SetCommand(const CartesianCommandBuilder& builder);
628
629 BodyCommandBuilder& SetCommand(const BodyComponentBasedCommandBuilder& builder);
630
632
634
635 private:
636 [[nodiscard]] void* Build() const;
637
638 private:
639 std::unique_ptr<BodyCommandBuilderImpl> impl_;
640
641 friend class ComponentBasedCommandBuilderImpl;
642};
643
644class RBY1_SDK_API MobilityCommandBuilder {
645 public:
647
649
651
653
654 MobilityCommandBuilder& SetCommand(const JointVelocityCommandBuilder& builder);
655
656 MobilityCommandBuilder& SetCommand(const SE2VelocityCommandBuilder& builder);
657
658 private:
659 [[nodiscard]] void* Build() const;
660
661 private:
662 std::unique_ptr<MobilityCommandBuilderImpl> impl_;
663
664 friend class ComponentBasedCommandBuilderImpl;
665};
666
667class RBY1_SDK_API HeadCommandBuilder {
668 public:
670
672
674
675 HeadCommandBuilder& SetCommand(const JointPositionCommandBuilder& builder);
676
677 private:
678 [[nodiscard]] void* Build() const;
679
680 private:
681 std::unique_ptr<HeadCommandBuilderImpl> impl_;
682
683 friend class ComponentBasedCommandBuilderImpl;
684};
685
687 public:
689
691
692 ComponentBasedCommandBuilder& SetMobilityCommand(const MobilityCommandBuilder& builder);
693
694 ComponentBasedCommandBuilder& SetBodyCommand(const BodyCommandBuilder& builder);
695
696 ComponentBasedCommandBuilder& SetHeadCommand(const HeadCommandBuilder& builder);
697
698 private:
699 [[nodiscard]] void* Build() const;
700
701 private:
702 std::unique_ptr<ComponentBasedCommandBuilderImpl> impl_;
703
704 friend class RobotCommandBuilderImpl;
705};
706
707class RBY1_SDK_API WholeBodyCommandBuilder {
708 public:
710
712
714
716
717 WholeBodyCommandBuilder& SetCommand(const StopCommandBuilder& builder);
718
719 WholeBodyCommandBuilder& SetCommand(const RealTimeControlCommandBuilder& builder);
720
721 private:
722 [[nodiscard]] void* Build() const;
723
724 private:
725 std::unique_ptr<WholeBodyCommandBuilderImpl> impl_;
726
727 friend class RobotCommandBuilderImpl;
728};
729
730class RBY1_SDK_API RobotCommandBuilder {
731 public:
733
735
737
739
741
742 RobotCommandBuilder& SetCommand(const WholeBodyCommandBuilder& builder);
743
744 RobotCommandBuilder& SetCommand(const ComponentBasedCommandBuilder& builder);
745
746 RobotCommandBuilder& SetCommand(const JogCommandBuilder& builder);
747
748 private:
749 [[nodiscard]] void* Build() const;
750
751 private:
752 std::unique_ptr<RobotCommandBuilderImpl> impl_;
753
754 template <typename T>
755 friend class RobotImpl;
756
757 template <typename T>
759};
760
761} // namespace rb
Definition robot_command_builder.h:494
Definition robot_command_builder.h:601
Definition robot_command_builder.h:580
Definition robot_command_builder.h:370
Definition robot_command_builder.h:411
Definition robot_command_builder.h:37
Definition robot_command_builder.h:686
Definition robot_command_builder.h:473
Definition robot_command_builder.h:667
Definition robot_command_builder.h:201
Definition robot_command_builder.h:256
Definition robot_command_builder.h:276
Definition robot_command_builder.h:266
Definition robot_command_builder.h:254
Definition robot_command_builder.h:93
Definition robot_command_builder.h:120
Definition robot_command_builder.h:65
Definition robot_command_builder.h:231
Definition robot_command_builder.h:644
Definition robot_command_builder.h:154
Definition robot_command_builder.h:353
Definition robot_command_builder.h:730
Definition robot.h:25
Definition robot_command_builder.h:313
Definition robot_command_builder.h:336
Definition robot_command_builder.h:533
Definition robot_command_builder.h:707