ROS系统——roslaunch发布4个realsense相机的4种方法
前提條件:
- 安裝好ROS系統
- 安裝好realsense-ros庫
備注:以下方法僅在PC主機上進行了測試,并且自帶4個USB3.0接口。
方法1:通過serial_no字段,ROS自動去查找并發布主機上全部realsense相機。
方法2:通過serial_no字段,開發者通過指定相機serial_no編號,發布指定數量的realsense相機。
方法3:通過usb_port_id字段,ROS自動去查找并發布主機上全部realsense相機。
方法4:通過usb_port_id字段,開發者通過指定主機的usb_port_id端口號,發布指定數量的realsense相機。
1?通過serial_no開啟4個相機方法
1.1 方法1——自動開啟全部realsense相機
如果要使用roslaunch命令開啟全部realsense相機,需要修改rs_multiple_devices.launch文件。
如果使用apt安裝的realsense-ros,那么該文件路徑在/opt/ros/melodic/share/realsense2_camera/launch/rs_multiple_devices.launch。
具體修改rs_multiple_devices.launch文件后的代碼如下(如果realsense相機超過4個,新增字段即可開啟更多相機):
<launch>
<arg?name="serial_no_camera1"?default=""/>?<!-- Note: Replace with actual serial number -->
<arg?name="serial_no_camera2"?default=""/>?<!-- Note: Replace with actual serial number -->
<arg?name="serial_no_camera3"?default=""/>?<!-- Note: Replace with actual serial number -->
<arg?name="serial_no_camera4"?default=""/>
<arg?name="camera1"?default="camera1"/>?<!-- Note: Replace with camera name -->
<arg?name="camera2"?default="camera2"/>?<!-- Note: Replace with camera name -->
<arg?name="camera3"?default="camera3"/>?<!-- Note: Replace with camera name -->
<arg?name="camera4"?default="camera4"/>
<arg?name="tf_prefix_camera1"?default="$(arg camera1)"/>
<arg?name="tf_prefix_camera2"?default="$(arg camera2)"/>
<arg?name="tf_prefix_camera3"?default="$(arg camera3)"/>
<arg?name="tf_prefix_camera4"?default="$(arg camera4)"/>
<arg?name="initial_reset"?default="false"/>
<group?ns="$(arg camera1)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera1)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera1)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera2)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera2)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera2)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera3)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera3)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera3)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera4)"?>
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera4)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera4)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
</launch>
通過rs_multiple_devices啟動全部相機的命令如下:(至于開啟多少個相機,與rs_multiple_devices.launch中你定義了多少個serial_no_camera字段有關)
roslaunch realsense2_camera rs_multiple_devices.launch?
1.2 方法2——自定義開啟部分的realsense相機
如果你不想開啟主機上所有realsense相機,并且想通過serial_no來指定要開啟的相機,那么就修改rs_multiple_devices.launch文件(如果realsense相機超過4個,新增字段即可開啟更多相機),如下:
<launch>
<arg?name="serial_no_camera1"?default=""/>?<!-- Note: Replace with actual serial number -->
<arg?name="serial_no_camera2"?default=""/>?<!-- Note: Replace with actual serial number -->
<arg?name="serial_no_camera3"?default=""/>?<!-- Note: Replace with actual serial number -->
<arg?name="serial_no_camera4"?default=""/>
<arg?name="camera1"?default="camera1"/>?<!-- Note: Replace with camera name -->
<arg?name="camera2"?default="camera2"/>?<!-- Note: Replace with camera name -->
<arg?name="camera3"?default="camera3"/>?<!-- Note: Replace with camera name -->
<arg?name="camera4"?default="camera4"/>
<arg?name="tf_prefix_camera1"?default="$(arg camera1)"/>
<arg?name="tf_prefix_camera2"?default="$(arg camera2)"/>
<arg?name="tf_prefix_camera3"?default="$(arg camera3)"/>
<arg?name="tf_prefix_camera4"?default="$(arg camera4)"/>
<arg?name="initial_reset"?default="false"/>
<group?ns="$(arg camera1)"??if="$(eval serial_no_camera1 != '')">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera1)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera1)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera2)"??if="$(eval serial_no_camera2 != '')">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera2)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera2)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera3)"??if="$(eval serial_no_camera3 != '')">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera3)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera3)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera4)"??if="$(eval serial_no_camera4 != '')">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="serial_no"?value="$(arg serial_no_camera4)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera4)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
</launch>
通過rs_multiple_devices啟動指定的一批相機的命令如下:(camera編號換成自己相機編號)
roslaunch realsense2_camera rs_multiple_devices.launch serial_no_camera1:=823112060538 serial_no_camera2:=821312062713? 。。。
備注:
- 查看當前主機插入的realsense相機編號的命令:rs-enumerate-devices | grep Serial
如上圖,主機上插了4個realsense相機,使用Serial Number后面的編號。
2?通過usb_port_id開啟4個相機方法
該方法原理是ROS自動在指定的主機USB端口號上找realsense相機。
具體方法:修改rs_multiple_devices.launch文件(也可以自己創建一個.launch文件),內容變成如下:
<launch>
<arg?name="usb_port_id1"?default="2-5"/>
<arg?name="usb_port_id2"?default="2-6"/>
<arg?name="usb_port_id3"?default="2-7"/>
<arg?name="usb_port_id4"?default="2-8"/>
<arg?name="camera1"?default="camera1"/>?<!-- Note: Replace with camera name -->
<arg?name="camera2"?default="camera2"/>?<!-- Note: Replace with camera name -->
<arg?name="camera3"?default="camera3"/>?<!-- Note: Replace with camera name -->
<arg?name="camera4"?default="camera4"/>
<arg?name="tf_prefix_camera1"?default="$(arg camera1)"/>
<arg?name="tf_prefix_camera2"?default="$(arg camera2)"/>
<arg?name="tf_prefix_camera3"?default="$(arg camera3)"/>
<arg?name="tf_prefix_camera4"?default="$(arg camera4)"/>
<arg?name="initial_reset"?default="false"/>
<group?ns="$(arg camera1)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="usb_port_id"?value="$(arg usb_port_id1)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera1)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera2)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="usb_port_id"?value="$(arg usb_port_id2)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera2)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera3)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="usb_port_id"?value="$(arg usb_port_id3)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera3)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
<group?ns="$(arg camera4)">
<include?file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg?name="usb_port_id"?value="$(arg usb_port_id4)"/>
<arg?name="tf_prefix"?value="$(arg tf_prefix_camera4)"/>
<arg?name="initial_reset"?value="$(arg initial_reset)"/>
</include>
</group>
</launch>
備注:
- 上述4個默認default端口號,是測試時4個realsense相機插在主機上的USB端口號。具體使用時,要明確realsense所插主機的USB端口號。查找realsense所插USB端口號方法見realsense-ros官網。
- 也可以刪掉default默認端口號,那執行rs_multiple_devices.launch時ROS會自動在4個主機USB端口上找realsense相機,找到幾個就會發布幾個相機。這就有個問題,如果rs_multiple_devices.launch中只定義了4個usb_port_id字段,那么它只會在4個USB端口上找,如果主機上有4個以上USB端口,那么該rs_multiple_devices.launch可能無法全部自動的找到所有realsense相機,解決辦法就是往rs_multiple_devices.launch中新增usb_port_id字段,使字段數量超過主機USB端口數量,那么該命令就能全部查到所有realsense相機。
- 如果只想打開固定USB端口上的realsense相機,參考本文“方法1”,刪除launch文件中default默認端口號,并在某些位置加上形如:?if="$(eval?usb_port_id1?!= '')"??
總結
以上是生活随笔為你收集整理的ROS系统——roslaunch发布4个realsense相机的4种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS系统开发——ROS,realsen
- 下一篇: ROS系统——动态修改realsense