MoveGroupInterface failes - Robot model parameter not found! Did you remap 'robot_description'?
Use case: Am trying to use ROS to control multiple robots with different URDF (can control using one URDF) so that each robot has a separate urdf/moveit setup. Only want basic trajectory functionality. Instead of one massive urdf with each robot base position defined by fixed base joint offset, amd trying a namepsace in a roslaunch group. Used moveit assistant to set up all the configuration files, but modified roslaunch to have a group with namespace. Testing with gazebo first. Have seen post where tf is the problem but tf has multiple remap options but not into guessing games (https://stackoverflow.com/questions/5...). If there is a book explaining this as I can’t find website, please advise. (It appears as if people have gotten this to work, but I can’t find an instance online).
Platform: ROS1 Kinetic/Ubuntu 16.04 tf1
Problem:
This cpp statement
_move_group=MoveGroupInterfacePtr(new moveit::planning_interface::MoveGroupInterface(PLANNING_GROUP));
gives this error:
[ERROR] [1607355463.560649688]: Robot model parameter not found! Did you remap 'robot_description'?
[FATAL] [1607355463.560786334]: Unable to construct robot model. Please make sure all needed information is on the
parameter server.
With this launch file:
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<!-- overwriting these args -->
<arg name="rvizconfig" default="$(find fanuc_lrmate200id_support)/config/urdf.rviz" />
<arg name="debug" default="false" />
<arg name="gui" default="true" />
<arg name="pause" default="false" />
<arg name="world" default="$(find fanuc_lrmate200id_support)/world/aprs-lab.world" />
<arg name="use_gui" default="false" />
<!-- include gazebo_ros launcher -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(arg world)" />
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg pause)" />
<arg name="use_sim_time" value="true" />
</include>
<arg name="ns" default="lrmate" />
<!-- empty strings are not allowed for namespace ! -> "/" -->
<group ns="$(arg ns)">
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find fanuc_lrmate200id_support)/urdf/fanuc_only.xacro'" />
<!-- The semantic description that corresponds to the URDF OR USE move_group.launch -->
<param name="robot_description_semantic" textfile="$(find fanuc_lrmate200id_support)/config/fanuc_lrmate200id.srdf" />
<!-- Set the param that trajectory_execution_manager needs to find the controller plugin -->
<param name="moveit_controller_manager" value="moveit_fake_controller_manager/MoveItFakeControllerManager" />
<!-- The rest of the params are specific to this plugin -->
<rosparam file="$(find fanuc_lrmate200id_support)/config/fake_controllers.yaml" />
<node name="spawn_urdf1" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -x -0.169 -y -1.140 -z 0.934191 -model aprs" respawn="false" output="screen" />
<!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
<include file="$(find fanuc_lrmate200id_support)/launch/move_group.launch">
<arg name="allow_trajectory_execution" value="true" />
<arg name="fake_execution" value="true" />
<arg name="info" value="true" />
<arg name="debug" value="true" />
</include>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ns="$(arg ns)">
<rosparam param="source_list">["crcl/joint_states"]</rosparam>
</node> ...