AuboRobot / aubo_robot

Developed for aubo robot (http://www.aubo-robotics.cn/)
http://wiki.ros.org/aubo_robot
BSD 3-Clause "New" or "Revised" License
207 stars 92 forks source link

Not able to simulate the planned moveit path in gazebo #81

Open soumy97 opened 1 year ago

soumy97 commented 1 year ago

I am trying to simulate the aubo i5 arm using ROS MoveIt in Gazebo. Initially, I am able to plan the path movement of my arm. But once I click on "Execute", it shows me

[ERROR] [1667725586.193688574, 20.055000000]: Unable to identify any set of controllers that can actuate the specified joints: [ foreArm_joint shoulder_joint upperArm_joint wrist1_joint wrist2_joint wrist3_joint ]
[ERROR] [1667725586.193709294, 20.055000000]: Known controllers and their joints:

I have tried a lot of things centered around this discussion but nothing is working. Any help would be appreciated. The necessary files are below: ros_controllers.yaml

 auboi5_controller:
  type: position_controllers/JointTrajectoryController
  default: True
  joints:
    - foreArm_joint
    - shoulder_joint
    - upperArm_joint
    - wrist1_joint
    - wrist2_joint
    - wrist3_joint
  gains:
    foreArm_joint:
      p: 100
      d: 1
      i: 1
      i_clamp: 1
    shoulder_joint:
      p: 100
      d: 1
      i: 1
      i_clamp: 1
    upperArm_joint:
      p: 100
      d: 1
      i: 1
      i_clamp: 1
    wrist1_joint:
      p: 100
      d: 1
      i: 1
      i_clamp: 1
    wrist2_joint:
      p: 100
      d: 1
      i: 1
      i_clamp: 1
    wrist3_joint:
      p: 100
      d: 1
      i: 1
      i_clamp: 1
controller_list:
  - name: auboi5_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    default: True
    joints:
      - foreArm_joint
      - shoulder_joint
      - upperArm_joint
      - wrist1_joint
      - wrist2_joint
      - wrist3_joint

gazebo_controllers.yaml

 # Publish joint_states
joint_state_controller:
  type: joint_state_controller/JointStateController
  publish_rate: 50

simple_moveit_controllers.yaml

 controller_list:
  - name: auboi5_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    default: True
    joints:
      - foreArm_joint
      - shoulder_joint
      - upperArm_joint
      - wrist1_joint
      - wrist2_joint
      - wrist3_joint

demo_gazebo.launch

<launch>
<!--specify the planning pipeline-->
<arg name="pipeline" default="ompl" />
<!-- Gazebo specific options -->
<arg name="gazebo_gui" default="true"/>
<arg name="paused" default="false"/>
<!-- launch the gazebo simulator and spawn the robot -->
<include file="$(dirname)/gazebo.launch">
<arg name="paused" value="$(arg paused)"/>
<arg name="gazebo_gui" value="$(arg gazebo_gui)"/>
</include>
<include file="$(dirname)/demo.launch" pass_all_args="true">
<!-- robot description is loaded by gazebo.launch, to enable Gazebo features -->
<arg name="load_robot_description" value="false" />
<arg name="moveit_controller_manager" value="ros_control" />
</include>
<node name="ros_control_moveit_controller_manager" pkg="controller_manager" type="controller_manager" respawn="false" output="screen" args="spawn joint_state_controller auboi5_controller" />
</launch>

demo.launch

<launch>
<!-- specify the planning pipeline -->
<arg name="pipeline" default="ompl" />
<!-- By default, we do not start a database (it can be large) -->
<arg name="db" default="false" />
<!-- Allow user to specify database location -->
<arg name="db_path" default="$(find aubo_moveit)/default_warehouse_mongo_db" />
<!-- By default, we are not in debug mode -->
<arg name="debug" default="false" />
<!-- By default, we will load or override the robot_description -->
<arg name="load_robot_description" default="true"/>
<!-- Choose controller manager: fake, simple, or ros_control -->
<arg name="moveit_controller_manager" default="fake" />
<!-- Set execution mode for fake execution controllers -->
<arg name="fake_execution_type" default="interpolate" />
<!-- By default, hide joint_state_publisher's GUI in 'fake' controller_manager mode -->
<arg name="use_gui" default="false" />
<arg name="use_rviz" default="true" />
<!-- If needed, broadcast static tf for robot root -->
<group if="$(eval arg('moveit_controller_manager') == 'fake')">
<!-- We do not have a real robot connected, so publish fake joint states via a joint_state_publisher MoveIt's fake controller's joint states are considered via the 'source_list' parameter -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" unless="$(arg use_gui)">
<rosparam param="source_list">[move_group/fake_controller_joint_states]></rosparam>
</node>
<!-- If desired, a GUI version is available allowing to move the simulated robot around manually This corresponds to moving around the real robot without the use of MoveIt. ->
<node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" if="$(arg use_gui)"*gt;
<rosparam param="source_list">[move_group/fake_controller_joint_states]></rosparam>
</node>
<!-- Given the published joint states, publish tf for the robot links -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="true" output="screen" />
</group>
<!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
<include file="$(dirname)/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="moveit_controller_manager" value="$(arg moveit_controller_manager)" />
<arg name="fake_execution_type" value="$(arg fake_execution_type)"/>
<arg name="info" value="true"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="pipeline" value="$(arg pipeline)"/>
<arg name="load_robot_description" value="$(arg load_robot_description)"/>
</include>
<!-- Run Rviz and load the default config to see the state of the move_group node -->
<include file="$(dirname)/moveit_rviz.launch" if="$(arg use_rviz)">
<arg name="rviz_config" value="$(dirname)/moveit.rviz"/>
<arg name="debug" value="$(arg debug)"/>
</include>
<!-- If database loading was enabled, start mongodb as well -->
<include file="$(dirname)/default_warehouse_db.launch" if="$(arg db)">
<arg name="moveit_warehouse_database_path" value="$(arg db_path)"/>
</include>
</launch>

gazebo.launch

<?xml version="1.0"?>
<launch>
<arg name="paused" default="false"/>
<arg name="gazebo_gui" default="true"/>
<arg name="initial_joint_positions" doc="Initial joint configuration of the robot" default=" -J foreArm_joint 0 -J shoulder_joint 0 -J upperArm_joint 0 -J wrist1_joint 0 -J wrist2_joint 0 -J wrist3_joint 0"/>
<!-- startup simulated world -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" default="worlds/empty.world"/>
<arg name="paused" value="true"/>
<arg name="gui" value="$(arg gazebo_gui)"/>
</include>
<!-- send robot urdf to param server -->
<param name="robot_description" textfile="$(find aubo)/urdf/aubo_i5.urdf" />
<!-- unpause only after loading robot model -->
<arg name="unpause" value="$(eval '' if arg('paused') else '-unpause')" />
<!-- push robot_description to factory and spawn robot in gazebo at the origin, change x,y,z arguments to spawn in a different position -->
<arg name="world_pose" value="-x 0 -y 0 -z 0" />
<node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot $(arg unpause) $(arg world_pose) $(arg initial_joint_positions)" respawn="false" output="screen" />
<!-- Load joint controller parameters for Gazebo -->
<rosparam file="$(find aubo_moveit)/config/gazebo_controllers.yaml" />
<!-- Spawn Gazebo ROS controllers -->
<node name="gazebo_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="joint_state_controller auboi5_controller" />
<!-- Load ROS controllers -->
<include file="$(dirname)/ros_controllers.launch"/>
</launch>

ros_controllers.launch

<?xml version="1.0"?>
<launch>
<!-- Load joint controller configurations from YAML file to parameter server -->
<rosparam file="$(find aubo_moveit)/config/ros_controllers.yaml" command="load"/>
<!-- Load the controllers -->
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="joint_state_controller auboi5_controller"/>
</launch>

ros_control_moveit_controller_manager.launch.xml

<launch>
<!-- Define MoveIt controller manager plugin -->
<param name="moveit_controller_manager" value="moveit_ros_control_interface::MoveItControllerManager" />
<!-- Load controller list to the parameter server -->
<rosparam file="$(find aubo_moveit)/config/simple_moveit_controllers.yaml" />
< </launch>

moveit_rviz.launch

<launch>
<arg name="debug" default="false" />
<arg unless="$(arg debug)" name="launch_prefix" value="" />
<arg if="$(arg debug)" name="launch_prefix" value="gdb --ex run --args" />
<arg name="rviz_config" default="" />
<arg if="$(eval rviz_config=='')" name="command_args" value="" />
<arg unless="$(eval rviz_config=='')" name="command_args" value="-d $(arg rviz_config)" />
<node name="$(anon rviz)" launch-prefix="$(arg launch_prefix)" pkg="rviz" type="rviz" respawn="false" args="$(arg command_args)" output="screen">
</node>
</launch>