Skip to content

Commit 6391efc

Browse files
committed
Explicitly just rotate gravity vector
Signed-off-by: AdamPettinger <adam.l.pettinger@gmail.com>
1 parent dad12f6 commit 6391efc

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

ur_controllers/include/ur_controllers/gpio_controller.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
#include "rclcpp/time.hpp"
5959
#include "rclcpp/duration.hpp"
6060
#include "std_msgs/msg/bool.hpp"
61+
#include "tf2/LinearMath/Quaternion.hpp"
62+
#include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
6163
#include "tf2_ros/buffer.hpp"
6264
#include "tf2_ros/transform_listener.hpp"
6365
#include "ur_controllers/gpio_controller_parameters.hpp"

ur_controllers/src/gpio_controller.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -590,16 +590,18 @@ bool GPIOController::setGravity(const ur_msgs::srv::SetGravity::Request::SharedP
590590
return false;
591591
}
592592

593-
// Transform the gravity vector
594-
geometry_msgs::msg::Vector3 transformed_gravity;
595-
tf2::doTransform(req->gravity.vector, transformed_gravity, tf_to_base_link);
593+
// Rotate the gravity vector
594+
tf2::Vector3 raw_gravity(req->gravity.vector.x, req->gravity.vector.y, req->gravity.vector.z);
595+
tf2::Quaternion quat;
596+
tf2::fromMsg(tf_to_base_link.transform.rotation, quat);
597+
tf2::Vector3 transformed_gravity = tf2::quatRotate(quat, raw_gravity);
596598

597599
// reset success flag
598600
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_ASYNC_SUCCESS].set_value(ASYNC_WAITING);
599601

600-
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_X].set_value(transformed_gravity.x);
601-
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_Y].set_value(transformed_gravity.y);
602-
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_Z].set_value(transformed_gravity.z);
602+
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_X].set_value(transformed_gravity.x());
603+
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_Y].set_value(transformed_gravity.y());
604+
std::ignore = command_interfaces_[CommandInterfaces::GRAVITY_Z].set_value(transformed_gravity.z());
603605

604606
if (!waitForAsyncCommand([&]() {
605607
return command_interfaces_[CommandInterfaces::GRAVITY_ASYNC_SUCCESS].get_optional().value_or(ASYNC_WAITING);

0 commit comments

Comments
 (0)