Problem: Write a launch file that loads image_proc (as a collection of nodelets) in a user-selectable namespace (default "camera").
Solution with current image_pipeline:
<launch>
<!-- For simplicity, assume top-level manager already running -->
<arg name="manager" />
<!-- Mimic remapping, so can launch with 'camera:=prosilica' -->
<arg name="camera" default="camera" />
<!-- Push down all topics/nodelets into "camera" namespace -->
<group ns="$(arg camera)" />
<!-- Debayer and publish monochrome and color topics -->
<node pkg="nodelet" type="nodelet" name="debayer"
args="load image_proc/debayer $(arg manager)" />
<!-- Rectify monochrome images -->
<node pkg="nodelet" type="nodelet" name="rectify_mono"
args="load image_proc/rectify $(arg manager)" />
<!-- Rectify color images - need to remap default topics -->
<node pkg="nodelet" type="nodelet" name="rectify_color"
args="load image_proc/rectify $(arg manager)">
<remap from="image_mono" to="image_color" />
<remap from="image_rect" to="image_rect_color" />
</node>
</group> <!-- camera ns -->
</launch>roslaunch image_proc.launch camera:=prosilica
Solution in modified image_pipeline, where each nodelet remaps "camera":
<launch>
<!-- For simplicity, assume top-level manager already running -->
<arg name="manager" />
<!-- Mimic remapping, so can launch with 'camera:=prosilica' -->
<arg name="camera" default="camera" />
<!-- Debayer and publish monochrome and color topics -->
<node pkg="nodelet" type="nodelet" name="debayer"
args="load image_proc/debayer $(arg manager)">
<remap from="camera" to="$(arg camera)" />
</node>
<!-- Rectify monochrome images -->
<node pkg="nodelet" type="nodelet" name="rectify_mono"
args="load image_proc/rectify $(arg manager)">
<remap from="camera" to="$(arg camera)" />
</node>
<!-- Rectify color images - need to remap default topics -->
<node pkg="nodelet" type="nodelet" name="rectify_color"
args="load image_proc/rectify $(arg manager)">
<remap from="$(arg camera)/image_mono" to="$(arg camera)/image_color" />
<remap from="$(arg camera)/image_rect" to="$(arg camera)/image_rect_color" />
</node>
</launch>roslaunch image_proc.launch camera:=prosilica
Notice in the rectify_color nodelet, we have to be very careful when remapping specific topics. That's because the ros::NodeHandle namespace scoping mechanism ends up applying namespace remappings left-to-right. So "camera" gets remapped to "prosilica", and then we have to map "prosilica/image_mono" to whatever we actually want.