mujoco_ros_utils
ExternalForce.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <rclcpp/rclcpp.hpp>
4 
5 #include <mujoco/mjdata.h>
6 #include <mujoco/mjmodel.h>
7 #include <mujoco/mjtnum.h>
8 #include <mujoco/mjvisualize.h>
9 
10 #include <mujoco_ros_utils/msg/external_force.hpp>
11 #include <string>
12 
13 namespace MujocoRosUtils
14 {
15 
18 {
19 public:
21  static void RegisterPlugin();
22 
28  static ExternalForce * Create(const mjModel * m, mjData * d, int plugin_id);
29 
30 public:
33 
38  void reset(const mjModel * m, int plugin_id);
39 
45  void compute(const mjModel * m, mjData * d, int plugin_id);
46 
54  void visualize(const mjModel * m, mjData * d, const mjvOption * opt, mjvScene * scn, int plugin_id);
55 
56 protected:
64  ExternalForce(const mjModel * m, mjData * d, int body_id, const std::string & topic_name, mjtNum vis_scale);
65 
69  void callback(const mujoco_ros_utils::msg::ExternalForce::SharedPtr msg);
70 
71 protected:
73  rclcpp::Node::SharedPtr nh_;
74 
76  rclcpp::executors::SingleThreadedExecutor::SharedPtr executor_;
77 
79  rclcpp::Subscription<mujoco_ros_utils::msg::ExternalForce>::SharedPtr sub_;
80 
82  int body_id_ = -1;
83 
85  std::string topic_name_;
86 
88  std::shared_ptr<mujoco_ros_utils::msg::ExternalForce> msg_;
89 
91  mjtNum end_time_ = -1;
92 
94  mjtNum vis_scale_;
95 };
96 
97 } // namespace MujocoRosUtils
Plugin to apply external force.
Definition: ExternalForce.h:18
std::shared_ptr< mujoco_ros_utils::msg::ExternalForce > msg_
External force message.
Definition: ExternalForce.h:88
static ExternalForce * Create(const mjModel *m, mjData *d, int plugin_id)
Create an instance.
void visualize(const mjModel *m, mjData *d, const mjvOption *opt, mjvScene *scn, int plugin_id)
Visualize.
rclcpp::Subscription< mujoco_ros_utils::msg::ExternalForce >::SharedPtr sub_
ROS publisher for external force.
Definition: ExternalForce.h:79
ExternalForce(ExternalForce &&)=default
Copy constructor.
mjtNum end_time_
End time to apply external force (-1 if no external force is applied)
Definition: ExternalForce.h:91
void reset(const mjModel *m, int plugin_id)
Reset.
std::string topic_name_
Topic name of external force.
Definition: ExternalForce.h:85
rclcpp::Node::SharedPtr nh_
ROS node handle.
Definition: ExternalForce.h:73
static void RegisterPlugin()
Register plugin.
rclcpp::executors::SingleThreadedExecutor::SharedPtr executor_
ROS callback queue.
Definition: ExternalForce.h:76
mjtNum vis_scale_
Arrow length scale (negative value for no visualization)
Definition: ExternalForce.h:94
void callback(const mujoco_ros_utils::msg::ExternalForce::SharedPtr msg)
Constructor.
void compute(const mjModel *m, mjData *d, int plugin_id)
Compute.