Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to use usb port number to connect to devices #960

Merged
merged 1 commit into from
Oct 24, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions realsense2_camera/include/realsense_node_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ namespace realsense2_camera
std::unique_ptr<InterfaceRealSenseNode> _realSenseNode;
rs2::context _ctx;
std::string _serial_no;
std::string _port_no;
bool _initial_reset;
std::thread _query_thread;

Expand Down
2 changes: 2 additions & 0 deletions realsense2_camera/launch/includes/nodelet.launch.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<arg name="external_manager" default="false"/>
<arg name="manager" default="realsense2_camera_manager"/>
<arg name="serial_no" default=""/>
<arg name="port_no" default=""/>
<arg name="tf_prefix" default=""/>
<arg name="json_file_path" default=""/>
<arg name="rosbag_filename" default=""/>
Expand Down Expand Up @@ -91,6 +92,7 @@
<node unless="$(arg external_manager)" pkg="nodelet" type="nodelet" name="$(arg manager)" args="manager" output="screen" required="$(arg required)"/>
<node pkg="nodelet" type="nodelet" name="realsense2_camera" args="load realsense2_camera/RealSenseNodeFactory $(arg manager)" required="$(arg required)">
<param name="serial_no" type="str" value="$(arg serial_no)"/>
<param name="port_no" type="str" value="$(arg port_no)"/>
<param name="json_file_path" type="str" value="$(arg json_file_path)"/>
<param name="rosbag_filename" type="str" value="$(arg rosbag_filename)"/>

Expand Down
2 changes: 2 additions & 0 deletions realsense2_camera/launch/rs_rgbd.launch
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ Processing enabled by this node:
<!-- Camera device specific arguments -->

<arg name="serial_no" default=""/>
<arg name="port_no" default=""/>
<arg name="json_file_path" default=""/>

<arg name="fisheye_width" default="640"/>
Expand Down Expand Up @@ -117,6 +118,7 @@ Processing enabled by this node:
<arg name="manager" value="$(arg manager)"/>
<arg name="tf_prefix" value="$(arg tf_prefix)"/>
<arg name="serial_no" value="$(arg serial_no)"/>
<arg name="port_no" value="$(arg port_no)"/>
<arg name="json_file_path" value="$(arg json_file_path)"/>

<arg name="enable_pointcloud" value="$(arg enable_pointcloud)"/>
Expand Down
2 changes: 2 additions & 0 deletions realsense2_camera/launch/rs_t265.launch
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ https://github.com/IntelRealSense/librealsense/blob/master/third-party/libtm/lib
-->
<launch>
<arg name="serial_no" default=""/>
<arg name="port_no" default=""/>
<arg name="json_file_path" default=""/>
<arg name="camera" default="camera"/>
<arg name="tf_prefix" default="$(arg camera)"/>
Expand Down Expand Up @@ -34,6 +35,7 @@ https://github.com/IntelRealSense/librealsense/blob/master/third-party/libtm/lib
<include file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
<arg name="tf_prefix" value="$(arg tf_prefix)"/>
<arg name="serial_no" value="$(arg serial_no)"/>
<arg name="port_no" value="$(arg port_no)"/>
<arg name="json_file_path" value="$(arg json_file_path)"/>

<arg name="enable_sync" value="$(arg enable_sync)"/>
Expand Down
4 changes: 4 additions & 0 deletions realsense2_camera/src/base_realsense_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,10 @@ void BaseRealSenseNode::setupDevice()

ROS_INFO_STREAM("Device Serial No: " << _serial_no);

auto camera_id = _dev.get_info(RS2_CAMERA_INFO_PHYSICAL_PORT);

ROS_INFO_STREAM("Device physical port: " << camera_id);

auto fw_ver = _dev.get_info(RS2_CAMERA_INFO_FIRMWARE_VERSION);
ROS_INFO_STREAM("Device FW version: " << fw_ver);

Expand Down
42 changes: 39 additions & 3 deletions realsense2_camera/src/realsense_node_factory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#include <thread>
#include <sys/time.h>

#include <boost/algorithm/string.hpp>

using namespace realsense2_camera;

#define REALSENSE_ROS_EMBEDDED_VERSION_STR (VAR_ARG_STRING(VERSION: REALSENSE_ROS_MAJOR_VERSION.REALSENSE_ROS_MINOR_VERSION.REALSENSE_ROS_PATCH_VERSION))
Expand Down Expand Up @@ -57,22 +59,55 @@ void RealSenseNodeFactory::getDevice(rs2::device_list list)
else
{
bool found = false;
ROS_INFO_STREAM(" ");
for (auto&& dev : list)
{
auto sn = dev.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER);
ROS_DEBUG_STREAM("Device with serial number " << sn << " was found.");
if (_serial_no.empty() || sn == _serial_no)
auto pn = dev.get_info(RS2_CAMERA_INFO_PHYSICAL_PORT);
auto name = dev.get_info(RS2_CAMERA_INFO_NAME);
ROS_INFO_STREAM("Device with physical ID " << pn << " was found.");
std::string port_id;
std::vector<std::string> results;
ROS_INFO_STREAM("Device with name " << name << " was found.");
if(strcmp(name,"Intel RealSense T265") == 0)
{
ROS_DEBUG_STREAM("T265 was found!");
boost::split(results, pn, [](char c){return c == ' ';});
std::string bus_line = results[2];
std::string port_line = results[3];
boost::split(results, bus_line, [](char c){return c == '_';});
std::string bus_no = results[1];
boost::split(results, port_line, [](char c){return c == '_';});
std::string port_no = results[1];
port_id = bus_no +"-"+ port_no;
}
else// if(strcmp(name, "Intel RealSense D435") == 0)
{
//ROS_DEBUG_STREAM("D345 was found!");
boost::split(results, pn, [](char c){return c == ':';});
std::string bus_line = results[3];
boost::split(results, bus_line, [](char c){return c == '/';});
std::string port_line = results[results.size()-1];
boost::replace_all(port_line,".","-");
port_id = port_line;
}
ROS_INFO_STREAM("Device with port number " << port_id << " was found.");


ROS_INFO_STREAM("Device with serial number " << sn << " was found."<<std::endl);
if ((_serial_no.empty() || sn == _serial_no) && (_port_no.empty() || port_id == _port_no))
{
_device = dev;
_serial_no = sn;
found = true;
break;
}
}
}
if (!found)
{
// T265 could be caught by another node.
ROS_ERROR_STREAM("The requested device with serial number " << _serial_no << " is NOT found. Will Try again.");
ROS_ERROR_STREAM("The requested device with port number " << _port_no << " is NOT found. Will Try again.");
}
}
}
Expand Down Expand Up @@ -135,6 +170,7 @@ void RealSenseNodeFactory::onInit()
ros::NodeHandle nh = getNodeHandle();
auto privateNh = getPrivateNodeHandle();
privateNh.param("serial_no", _serial_no, std::string(""));
privateNh.param("port_no", _port_no, std::string(""));

std::string rosbag_filename("");
privateNh.param("rosbag_filename", rosbag_filename, std::string(""));
Expand Down