I am using ROS Noetic with an Xbox 360 Kinect camera, and I need to use the camera while the robot is moving in a saved map. Initially, I run the command $ roslaunch turtlebot_navigation amcl_demo.launch map_file:=/tmp/my_map.yaml, and everything works well. However, when I run the OpenNI driver using the command $ roslaunch openni_launch openni.launch, an error occurs.
-Note that everything works fine individually. -The screenshot contains the error massage.
This is amcl_demo.launch file
<launch>
<!-- 3D sensor -->
<arg name="3d_sensor" default="$(env TURTLEBOT_3D_SENSOR)"/> <!-- r200, kinect, asus_xtion_pro -->
<include file="$(find turtlebot_bringup)/launch/3dsensor.launch">
<arg name="rgb_processing" value="false" />
<arg name="depth_registration" value="false" />
<arg name="depth_processing" value="false" />
<!-- We must specify an absolute topic name because if not it will be prefixed by "$(arg camera)".
Probably is a bug in the nodelet manager: https://github.com/ros/nodelet_core/issues/7 -->
<arg name="scan_topic" value="/scan" />
</include>
<!-- Map server -->
<arg name="map_file" default="$(env TURTLEBOT_MAP_FILE)"/>
<node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />
<!-- AMCL -->
<arg name="custom_amcl_launch_file" default="$(find turtlebot_navigation)/launch/includes/amcl/$(arg 3d_sensor)_amcl.launch.xml"/>
<arg name="initial_pose_x" default="0.0"/> <!-- Use 17.0 for willow's map in simulation -->
<arg name="initial_pose_y" default="0.0"/> <!-- Use 17.0 for willow's map in simulation -->
<arg name="initial_pose_a" default="0.0"/>
<include file="$(arg custom_amcl_launch_file)">
<arg name="initial_pose_x" value="$(arg initial_pose_x)"/>
<arg name="initial_pose_y" value="$(arg initial_pose_y)"/>
<arg name="initial_pose_a" value="$(arg initial_pose_a)"/>
</include>
<!-- Move base -->
<arg name="custom_param_file" default="$(find turtlebot_navigation)/param/$(arg 3d_sensor)_costmap_params.yaml"/>
<include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml">
<arg name="custom_param_file" value="$(arg custom_param_file)"/>
</include>
</launch>
And this is openni_launch file
<!-- Entry point for using OpenNI devices -->
<launch>
<!-- "camera" should uniquely identify the device. All topics are pushed down
into the "camera" namespace, and it is prepended to tf frame ids. -->
<arg name="camera" default="camera" />
<arg name="rgb_frame_id" default="$(arg camera)_rgb_optical_frame" />
<arg name="depth_frame_id" default="$(arg camera)_depth_optical_frame" />
<!-- device_id can have the following formats:
"B00367707227042B": Use device with given serial number
"#1" : Use first device found
"2@3" : Use device on USB bus 2, address 3
"2@0" : Use first device found on USB bus 2
-->
<arg name="device_id" default="#2" />
<!-- By default, calibrations are stored to file://${ROS_HOME}/camera_info/${NAME}.yaml,
where ${NAME} is of the form "[rgb|depth]_[serial#]", e.g. "depth_B00367707227042B".
See camera_info_manager docs for calibration URL details. -->
<arg name="rgb_camera_info_url" default="" />
<arg name="depth_camera_info_url" default="" />
<!-- Use OpenNI's factory-calibrated depth->RGB registration? -->
<arg name="depth_registration" default="false" />
<!-- Arguments for remapping all device namespaces -->
<arg name="rgb" default="rgb" />
<arg name="ir" default="ir" />
<arg name="depth" default="depth" />
<arg name="depth_registered" default="depth_registered" />
<arg name="depth_registered_filtered" default="depth_registered" />
<arg name="projector" default="projector" />
<!-- Optionally suppress loading the driver nodelet and/or publishing the default tf
tree. Useful if you are playing back recorded raw data from a bag, or are
supplying a more accurate tf tree from calibration. -->
<arg name="load_driver" default="true" />
<arg name="publish_tf" default="true" />
<!-- Processing Modules -->
<arg name="rgb_processing" default="true"/>
<arg name="ir_processing" default="true"/>
<arg name="depth_processing" default="true"/>
<arg name="depth_registered_processing" default="true"/>
<arg name="disparity_processing" default="true"/>
<arg name="disparity_registered_processing" default="true"/>
<arg name="hw_registered_processing" default="true" />
<arg name="sw_registered_processing" default="true" />
<!-- Disable bond topics by default -->
<arg name="bond" default="false" /> <!-- DEPRECATED, use respawn arg instead -->
<arg name="respawn" default="$(arg bond)" />
<!-- Worker threads for the nodelet manager -->
<arg name="num_worker_threads" default="4" />
<!-- Push down all topics/nodelets into "camera" namespace -->
<group ns="$(arg camera)">
<!-- Start nodelet manager in top-level namespace -->
<arg name="manager" value="$(arg camera)_nodelet_manager" />
<arg name="debug" default="false" /> <!-- Run manager in GDB? -->
<include file="$(find rgbd_launch)/launch/includes/manager.launch.xml">
<arg name="name" value="$(arg manager)" />
<arg name="debug" value="$(arg debug)" />
<arg name="num_worker_threads" value="$(arg num_worker_threads)" />
</include>
<!-- Load driver -->
<include if="$(arg load_driver)"
file="$(find openni_launch)/launch/includes/device.launch.xml">
<!-- Could really use some syntactic sugar for this -->
<arg name="manager" value="$(arg manager)" />
<arg name="device_id" value="$(arg device_id)" />
<arg name="rgb_frame_id" value="$(arg rgb_frame_id)" />
<arg name="depth_frame_id" value="$(arg depth_frame_id)" />
<arg name="rgb_camera_info_url" value="$(arg rgb_camera_info_url)" />
<arg name="depth_camera_info_url" value="$(arg depth_camera_info_url)" />
<arg name="depth_registration" value="$(arg depth_registration)" />
<arg name="rgb" value="$(arg rgb)" />
<arg name="ir" value="$(arg ir)" />
<arg name="depth" value="$(arg depth)" />
<arg name="depth_registered" value="$(arg depth_registered)" />
<arg name="projector" value="$(arg projector)" />
<arg name="respawn" value="$(arg respawn)" />
</include>
<!-- Load standard constellation of processing nodelets -->
<include file="$(find rgbd_launch)/launch/includes/processing.launch.xml">
<arg name="manager" value="$(arg manager)" />
<arg name="rgb" value="$(arg rgb)" />
<arg name="ir" value="$(arg ir)" />
<arg name="depth" value="$(arg depth)" />
<arg name="depth_registered" value="$(arg depth_registered)" />
<arg name="depth_registered_filtered" value="$(arg depth_registered_filtered)" />
<arg name="projector" value="$(arg projector)" />
<arg name="respawn" value="$(arg respawn)" />
<arg name="rgb_processing" value="$(arg rgb_processing)" />
<arg name="ir_processing" value="$(arg ir_processing)" />
<arg name="depth_processing" value="$(arg depth_processing)" />
<arg name="depth_registered_processing" value="$(arg depth_registered_processing)" />
<arg name="disparity_processing" value="$(arg disparity_processing)" />
<arg name="disparity_registered_processing" value="$(arg disparity_registered_processing)" />
<arg name="hw_registered_processing" value="$(arg hw_registered_processing)" />
<arg name="sw_registered_processing" value="$(arg sw_registered_processing)" />
</include>
</group> <!-- camera -->
<!-- Load reasonable defaults for the relative pose between cameras -->
<include if="$(arg publish_tf)"
file="$(find rgbd_launch)/launch/kinect_frames.launch">
<arg name="camera" value="$(arg camera)" />
</include>
</launch>
I tried to create a combined_launch file but the same error occurs this is the combined_launch file
<launch>
<!-- Launch the OpenNI driver -->
<include file="$(find openni_launch)/launch/openni.launch">
<arg name="camera" default="camera" />
</include>
<!-- Wait for a few seconds to ensure the camera is up and running -->
<rosparam command="load" file="$(find turtlebot_navigation)/maps/wait_for_camera.yaml" />
<!-- Launch the TurtleBot navigation -->
<include file="$(find turtlebot_navigation)/launch/amcl_demo.launch">
<arg name="map_file" value="/home/raghad/ppu_map.yaml" />
</include>
</launch>