I am building my own 4WD model and I am trying to implement 4 velocity controllers (one for each motor). The issue arises when I execute my launch file (which contains the controller_spawner node), the transforms between the base_link and the 4 wheels are non-existent. I have tried the joint_state_publisher node with the GUI (instead of the controller_spawner) and it works. However when I implement the controller_spawner node, the transforms disappear. I have made sure to download all necessary packages for ros_control. I have used the ros_control plugin in my URDF and even made sure the namespaces are all correct in the YAML, URDF and launch file. Every time I execute the launch file, I get the error: "Controller Spawner couldn't find the expected controller_manager ROS interface."
Then I get the error within Rviz that there are no transforms between the base_link and the wheels. When I run rospack list | grep control I get:
control_msgs /opt/ros/melodic/share/control_msgs
control_toolbox /opt/ros/melodic/share/control_toolbox
controller_interface /opt/ros/melodic/share/controller_interface
controller_manager /opt/ros/melodic/share/controller_manager
controller_manager_msgs /opt/ros/melodic/share/controller_manager_msgs
diff_drive_controller /opt/ros/melodic/share/diff_drive_controller
effort_controllers /opt/ros/melodic/share/effort_controllers
force_torque_sensor_controller /opt/ros/melodic/share/force_torque_sensor_controller
forward_command_controller /opt/ros/melodic/share/forward_command_controller
gazebo_ros_control /opt/ros/melodic/share/gazebo_ros_control
gripper_action_controller /opt/ros/melodic/share/gripper_action_controller
imu_sensor_controller /opt/ros/melodic/share/imu_sensor_controller
joint_state_controller /opt/ros/melodic/share/joint_state_controller
joint_trajectory_controller /opt/ros/melodic/share/joint_trajectory_controller
position_controllers /opt/ros/melodic/share/position_controllers
velocity_controllers /opt/ros/melodic/share/velocity_controllers
My launch file is:
My YAML:
monsterborg:
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
rf_wheel_velocity_controller:
type: effort_controllers/JointVelocityController
joint: base_to_rf_wheel
pid: {p: 1.0, i: 1.0, d: 1.0}
lf_wheel_velocity_controller:
type: effort_controllers/JointVelocityController
joint: base_to_lf_wheel
pid: {p: 1.0, i: 1.0, d: 1.0}
rb_wheel_velocity_controller:
type: effort_controllers/JointVelocityController
joint: base_to_rb_wheel
pid: {p: 1.0, i: 1.0, d: 1.0}
lb_wheel_velocity_controller:
type: effort_controllers/JointVelocityController
joint: base_to_lb_wheel
pid: {p: 1.0, i: 1.0, d: 1.0}
Here is a small snippet of the URDF file for the base_link, one wheel and motor:
100000.0 100000.0 10.0 10.0 Gazebo/White 100000.0 100000.0 1.0 1.0 Gazebo/Black /monsterborg transmission_interface/SimpleTransmission EffortJointInterface EffortJointInterface 1
So my question is: What is missing or what am I doing wrong? Do I have to spawn the model in Gazebo first then check Rviz? I would like to tune my controllers ASAP via rqt. For the URDF file, do I need to include the ros_control plugin for every transmission tag I make (I have already done that too).
Thank you for your help in advance!
↧