Hello fellow roboticists,
At our startup, we have developed a ROS 2 workspace for a 5-DOF mobile manipulator, transitioning from Gazebo + RVIZ 2 simulation to physical hardware. We're using MoveIt 2 for motion planning and have written our own hardware interface for ros2_control. Everything works well, but we've encountered an issue related to feedback control.
Current Setup
- Hardware Interface Plugin: The read() function reads the current motor positions, and manual motor movement reflects correctly in RVIZ 2. The write() function sends position commands from MoveIt 2 to the robot, and the manipulator moves accordingly.
- URDF File: Includes the hardware interface plugin under ros2_control tags, with each joint configured for position command and state interfaces.
- controllers.yaml: Specifies the arm controller as joint_trajectory_controller/JointTrajectoryController, using position for both command and state interfaces.
- moveit_controllers.yaml: Uses moveit_simple_controller_manager/MoveItSimpleControllerManager, specifying FollowJointTrajectory for control.
The Problem:
The arm's control seems to operate in an open-loop manner. For example, if one motor is blocked, the other motors continue moving as if there’s no issue. Even when I manually set the position state to 0 in the read() function of the hardware interface, MoveIt 2 still generates the same trajectory without considering this feedback.
Question:
Is there a way to integrate motor feedback into MoveIt 2 to adapt the trajectory based on real-time motor states? How can I ensure MoveIt 2 reacts to feedback from the motors for more accurate control of the manipulator?