Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ab4e6fc
feat: possible to get robot_description from topic
pucciland95 Feb 28, 2025
ca6c1f2
feat: possible to read robot_description from topic
pucciland95 Feb 28, 2025
01d4bca
Merge branch 'main' of https://github.com/pucciland95/mujoco_ros2_con…
pucciland95 Feb 28, 2025
eb674bf
refactor: removed node from rendering
pucciland95 Mar 3, 2025
869924c
refactor: removed node from hardware interface
pucciland95 Mar 3, 2025
3ed219f
refactor: removed node from hardware interface
pucciland95 Mar 3, 2025
8be09f8
refactor: spin thread moved ouside of MujocoRos2Control
pucciland95 Mar 3, 2025
687971f
refactor: possible to get robot_description from topic or param
pucciland95 Mar 3, 2025
525f83e
doc: removed commet
pucciland95 Mar 3, 2025
e27872e
refactor: removed try&catch for robot_description
pucciland95 Mar 3, 2025
1b212a4
refactor: renamed mujoco_system logger
pucciland95 Mar 3, 2025
538fcfd
changed log warn for rob descr from topic
pucciland95 Mar 4, 2025
21517c6
revert: node and executor inside MujocoRos2Control
pucciland95 Mar 8, 2025
e88becf
Removed comment
pucciland95 Mar 9, 2025
273aecf
spin_once -> spin_some in robot_description
pucciland95 Mar 9, 2025
1723569
cm_executor declaration removed
pucciland95 Mar 9, 2025
ab75d17
Removed cm_executor->add_node(node)
pucciland95 Mar 9, 2025
47db812
refafctor: added namespace 4 cm and spin_some 4 rob_descr
pucciland95 Mar 9, 2025
0f692c0
revert: defined MultiThreadedExecutor in MujocoRos2Control
pucciland95 Mar 10, 2025
8d769f0
revert: spin->spin_once
pucciland95 Apr 4, 2025
6ecc0b8
Merge branch 'main' into main
pucciland95 Apr 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class MujocoRos2Control
public:
MujocoRos2Control(rclcpp::Node::SharedPtr &node, mjModel *mujoco_model, mjData *mujoco_data);
~MujocoRos2Control();
void init();
void init(std::shared_ptr<rclcpp::executors::MultiThreadedExecutor> executor);
void update();

private:
Expand Down
37 changes: 26 additions & 11 deletions mujoco_ros2_control/src/mujoco_ros2_control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,38 @@ MujocoRos2Control::~MujocoRos2Control()
cm_thread_.join();
}

void MujocoRos2Control::init()
void MujocoRos2Control::init(std::shared_ptr<rclcpp::executors::MultiThreadedExecutor> executor)
{
cm_executor_ = executor;
cm_executor_->add_node(node_);

// Getting robot description from topic
std::string urdf_string;
bool robot_description_received = false;
auto robot_description_sub = node_->create_subscription<std_msgs::msg::String>(
"robot_description", rclcpp::QoS(1).transient_local(),
[&](const std_msgs::msg::String::SharedPtr msg)
{
if (!msg->data.empty() && robot_description_received == false)
{
robot_description_received = true;
urdf_string = msg->data;
}
});

while (robot_description_received == false && rclcpp::ok())
{
cm_executor_->spin_once();
RCLCPP_INFO(node_->get_logger(), "Waiting for robot description message");
rclcpp::sleep_for(std::chrono::milliseconds(500));
}

clock_publisher_ = node_->create_publisher<rosgraph_msgs::msg::Clock>("/clock", 10);
// Read urdf from ros parameter server then
// setup actuators and mechanism control node.
std::string urdf_string;
std::vector<hardware_interface::HardwareInfo> control_hardware_info;
try
{
urdf_string = node_->get_parameter("robot_description").as_string();
control_hardware_info = hardware_interface::parse_control_resources_from_urdf(urdf_string);
}
catch (const std::runtime_error &ex)
Expand Down Expand Up @@ -119,7 +141,6 @@ void MujocoRos2Control::init()

// Create the controller manager
RCLCPP_INFO(logger_, "Loading controller_manager");
cm_executor_ = std::make_shared<rclcpp::executors::MultiThreadedExecutor>();
controller_manager_ = std::make_shared<controller_manager::ControllerManager>(
std::move(resource_manager), cm_executor_, "controller_manager", node_->get_namespace());

Expand All @@ -140,13 +161,7 @@ void MujocoRos2Control::init()
rclcpp::Parameter("use_sim_time", rclcpp::ParameterValue(true)));

stop_cm_thread_ = false;
auto spin = [this]()
{
while (rclcpp::ok() && !stop_cm_thread_)
{
cm_executor_->spin_once();
}
};
auto spin = [this]() { cm_executor_->spin(); };
cm_thread_ = std::thread(spin);
}

Expand Down
9 changes: 6 additions & 3 deletions mujoco_ros2_control/src/mujoco_ros2_control_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,11 @@ int main(int argc, const char **argv)
mujoco_data = mj_makeData(mujoco_model);

// initialize mujoco control
auto control = mujoco_ros2_control::MujocoRos2Control(node, mujoco_model, mujoco_data);
control.init();
auto mujoco_control = mujoco_ros2_control::MujocoRos2Control(node, mujoco_model, mujoco_data);

auto executor = std::make_shared<rclcpp::executors::MultiThreadedExecutor>();

mujoco_control.init(executor);
RCLCPP_INFO_STREAM(
node->get_logger(), "Mujoco ros2 controller has been successfully initialized !");

Expand All @@ -81,7 +84,7 @@ int main(int argc, const char **argv)
mjtNum simstart = mujoco_data->time;
while (mujoco_data->time - simstart < 1.0 / 60.0)
{
control.update();
mujoco_control.update();
}
rendering->update();
}
Expand Down