Skip to content
Snippets Groups Projects
Commit 09348bde authored by Johann Mantel's avatar Johann Mantel
Browse files

use multiple LaserScanner

parent 05bb94b0
No related branches found
No related tags found
No related merge requests found
...@@ -151,26 +151,18 @@ ...@@ -151,26 +151,18 @@
ArmarX.SickLaserUnit.angleOffset = 0.0 ArmarX.SickLaserUnit.angleOffset = 0.0
# ArmarX.SickLaserUnit.deviceNumber: number of the LaserScanner Device # ArmarX.SickLaserUnit.devices: List of Devices in format frame1,ip1,port1;frame2,ip2,port2
# Attributes: # Attributes:
# - Default: 0 # - Default: LaserScannerFront,192.168.8.133,2112
# - Case sensitivity: yes # - Case sensitivity: yes
# - Required: no # - Required: no
# ArmarX.SickLaserUnit.deviceNumber = 0 ArmarX.SickLaserUnit.devices = LaserScannerFront,192.168.8.133,2112
# ArmarX.SickLaserUnit.devices: No Description
# Attributes:
# - Default: Device1; Scanner2
# - Case sensitivity: no
# - Required: no
ArmarX.SickLaserUnit.devices = Device1; Scanner2
# ArmarX.SickLaserUnit.hostname: Hostname of the LaserScanner # ArmarX.SickLaserUnit.hostname: No Description
# Attributes: # Attributes:
# - Default: 192.168.8.133 # - Default: 192.168.8.133
# - Case sensitivity: yes # - Case sensitivity: no
# - Required: no # - Required: no
ArmarX.SickLaserUnit.hostname = 192.168.8.133 ArmarX.SickLaserUnit.hostname = 192.168.8.133
...@@ -183,10 +175,10 @@ ArmarX.SickLaserUnit.hostname = 192.168.8.133 ...@@ -183,10 +175,10 @@ ArmarX.SickLaserUnit.hostname = 192.168.8.133
ArmarX.SickLaserUnit.laserScannerTopicName = "SickTopic" ArmarX.SickLaserUnit.laserScannerTopicName = "SickTopic"
# ArmarX.SickLaserUnit.port: port to use on the LaserScanner # ArmarX.SickLaserUnit.port: No Description
# Attributes: # Attributes:
# - Default: 2112 # - Default: 2112
# - Case sensitivity: yes # - Case sensitivity: no
# - Required: no # - Required: no
ArmarX.SickLaserUnit.port = 2112 ArmarX.SickLaserUnit.port = 2112
...@@ -222,15 +214,6 @@ ArmarX.SickLaserUnit.rangeMin = 0.01 ...@@ -222,15 +214,6 @@ ArmarX.SickLaserUnit.rangeMin = 0.01
ArmarX.SickLaserUnit.scannerType = sick_tim_5xx ArmarX.SickLaserUnit.scannerType = sick_tim_5xx
# ArmarX.SickLaserUnit.subscribeDatagram: subscribe to Datagram in communication or not
# Attributes:
# - Default: false
# - Case sensitivity: yes
# - Required: no
# - Possible values: {0, 1, false, no, true, yes}
# ArmarX.SickLaserUnit.subscribeDatagram = false
# ArmarX.SickLaserUnit.timeIncrement: timeIncrement?? # ArmarX.SickLaserUnit.timeIncrement: timeIncrement??
# Attributes: # Attributes:
# - Default: 0.10000000000000001 # - Default: 0.10000000000000001
...@@ -247,19 +230,20 @@ ArmarX.SickLaserUnit.timeIncrement = 0.1 ...@@ -247,19 +230,20 @@ ArmarX.SickLaserUnit.timeIncrement = 0.1
# ArmarX.SickLaserUnit.timelimit = 5 # ArmarX.SickLaserUnit.timelimit = 5
# ArmarX.SickLaserUnit.topicName: Name of topic. # ArmarX.SickLaserUnit.topicName: Name of the topic
# Attributes: # Attributes:
# - Default: SICKLaserScanner
# - Case sensitivity: yes # - Case sensitivity: yes
# - Required: yes # - Required: no
ArmarX.SickLaserUnit.topicName = "myLaserTopic1" ArmarX.SickLaserUnit.topicName = "myLaserTopic1"
# ArmarX.SickLaserUnit.tpc.sub.LaserScannerUnit: Name of the `LaserScannerUnit` topic to subscribe to. # ArmarX.SickLaserUnit.tpc.sub.LaserScannerUnit: Name of the `LaserScannerUnit` topic to subscribe to.
# Attributes: # Attributes:
# - Default: LaserScannerUnit # - Default: SICKLaserScanner
# - Case sensitivity: yes # - Case sensitivity: yes
# - Required: no # - Required: no
# ArmarX.SickLaserUnit.tpc.sub.LaserScannerUnit = LaserScannerUnit # ArmarX.SickLaserUnit.tpc.sub.LaserScannerUnit = SICKLaserScanner
# ArmarX.SickLaserUnit.updatePeriod: No Description # ArmarX.SickLaserUnit.updatePeriod: No Description
......
...@@ -123,9 +123,7 @@ namespace armarx ...@@ -123,9 +123,7 @@ namespace armarx
def->optional(properties.topicName, "topicName", "Name of the topic"); def->optional(properties.topicName, "topicName", "Name of the topic");
//Scanner parameters //Scanner parameters
def->optional(properties.frameName, "frameName", "Name of scanner frame."); def->optional(properties.devices, "devices", "List of Devices in format frame1,ip1,port1;frame2,ip2,port2");
def->optional(properties.hostname, "hostname", "Hostname of the LaserScanner");
def->optional(properties.port, "port", "port to use on the LaserScanner");
def->optional(properties.timelimit, "timelimit", "timelimit for communication"); def->optional(properties.timelimit, "timelimit", "timelimit for communication");
def->required(properties.scannerType, "scannerType", "Name of the LaserScanner"); def->required(properties.scannerType, "scannerType", "Name of the LaserScanner");
def->optional(properties.angleOffset, "angleOffset", "offset to the scanning angle"); def->optional(properties.angleOffset, "angleOffset", "offset to the scanning angle");
...@@ -145,38 +143,50 @@ namespace armarx ...@@ -145,38 +143,50 @@ namespace armarx
ARMARX_INFO_S << "initializing SickLaserUnit."; ARMARX_INFO_S << "initializing SickLaserUnit.";
scanDevice.scanTopic = topic; std::vector<std::string> splitDeviceStrings = Split(properties.devices, ";");
scanDevice.isSensorInitialized = false; scanDevices.clear();
if (properties.hostname != "") scanDevices.reserve(splitDeviceStrings.size());
for (std::string const& deviceString : splitDeviceStrings)
{ {
scanDevice.useTcp = true; std::vector<std::string> deviceInfo = Split(deviceString, ",");
scanDevice.ip = properties.hostname; if (deviceInfo.size() != 3)
} {
scanDevice.port = properties.port; ARMARX_WARNING << "Unexpected format for laser scanner device: " << deviceString
scanDevice.frameName = properties.frameName; << " (split size: " << deviceInfo.size() << ")";
scanDevice.angleOffset = properties.angleOffset; continue;
scanDevice.timelimit = properties.timelimit; }
scanDevice.scannerType = properties.scannerType; SickLaserScanDevice& device = scanDevices.emplace_back();
scanDevice.rangeMin = properties.rangeMin; device.scanTopic = topic;
scanDevice.rangeMax = properties.rangeMax; device.isSensorInitialized = false;
scanDevice.timeIncrement = properties.timeIncrement; device.frameName = deviceInfo[0];
//scanner Parameters if (deviceInfo[1] != "")
try {
{ device.useTcp = true;
scanDevice.parser = new sick_scan::SickGenericParser(scanDevice.scannerType); device.ip = deviceInfo[1];
scanDevice.parser->set_range_min(properties.rangeMin); }
scanDevice.parser->set_range_max(properties.rangeMax); device.port = deviceInfo[2];
scanDevice.parser->set_time_increment(properties.timeIncrement); device.angleOffset = properties.angleOffset;
} device.timelimit = properties.timelimit;
catch (std::exception const& e) device.scannerType = properties.scannerType;
{ device.rangeMin = properties.rangeMin;
ARMARX_ERROR_S << "Could not create parser. Wrong Scanner name."; device.rangeMax = properties.rangeMax;
return; device.timeIncrement = properties.timeIncrement;
//scanner Parameters
try
{
device.parser = new sick_scan::SickGenericParser(device.scannerType);
device.parser->set_range_min(properties.rangeMin);
device.parser->set_range_max(properties.rangeMax);
device.parser->set_time_increment(properties.timeIncrement);
}
catch (std::exception const& e)
{
ARMARX_ERROR_S << "Could not create parser. Wrong Scanner name.";
return;
}
device.parser->getCurrentParamPtr()->setUseBinaryProtocol(false);
device.colaDialectId = 'A';
} }
scanDevice.parser->getCurrentParamPtr()->setUseBinaryProtocol(false);
scanDevice.colaDialectId = 'A';
ARMARX_INFO_S << "ASCII protocol activated.";
ARMARX_INFO_S << "SickLaserUnit initialisation complete.";
//addPlugin(heartbeat); //addPlugin(heartbeat);
//configureHeartbeatChannel(); //configureHeartbeatChannel();
...@@ -186,20 +196,20 @@ namespace armarx ...@@ -186,20 +196,20 @@ namespace armarx
{ {
topic = getTopic<LaserScannerUnitListenerPrx>(properties.topicName); topic = getTopic<LaserScannerUnitListenerPrx>(properties.topicName);
offeringTopic(properties.topicName); offeringTopic(properties.topicName);
scanDevice.scanTopic = topic;
ARMARX_INFO_S << "Connecting.";
//start the laser scanner for (SickLaserScanDevice& device : scanDevices)
if (scanDevice.task)
{ {
scanDevice.task->stop(); device.scanTopic = topic;
scanDevice.task = nullptr; //start the laser scanner
if (device.task)
{
device.task->stop();
device.task = nullptr;
}
device.runState = RunState::scannerInit;
device.task = new RunningTask<SickLaserScanDevice>(&device, &SickLaserScanDevice::run, "SickLaserScanUpdate_" + device.ip);
device.task->start();
} }
scanDevice.runState = RunState::scannerInit;
scanDevice.task = new RunningTask<SickLaserScanDevice>(&scanDevice, &SickLaserScanDevice::run, "SickLaserScanUpdate_" + scanDevice.ip);
scanDevice.task->start();
// Do things after connecting to topics and components. // Do things after connecting to topics and components.
/* (Requies the armarx::DebugObserverComponentPluginUser.) /* (Requies the armarx::DebugObserverComponentPluginUser.)
...@@ -231,18 +241,21 @@ namespace armarx ...@@ -231,18 +241,21 @@ namespace armarx
void SickLaserUnit::onDisconnectComponent() void SickLaserUnit::onDisconnectComponent()
{ {
ARMARX_INFO_S << "Disconnecting LaserScanner."; ARMARX_INFO_S << "Disconnecting LaserScanner.";
if (scanDevice.task) for (SickLaserScanDevice& device : scanDevices)
{
scanDevice.task->stop();
scanDevice.task = nullptr;
}
if (scanDevice.scanner)
{
delete scanDevice.scanner;
}
if (scanDevice.parser)
{ {
delete scanDevice.parser; if (device.task)
{
device.task->stop();
device.task = nullptr;
}
if (device.scanner)
{
delete device.scanner;
}
if (device.parser)
{
delete device.parser;
}
} }
} }
......
...@@ -133,9 +133,7 @@ namespace armarx ...@@ -133,9 +133,7 @@ namespace armarx
{ {
std::string topicName = "SICKLaserScanner"; std::string topicName = "SICKLaserScanner";
//scanner parameters //scanner parameters
std::string hostname = "192.168.8.133"; std::string devices = "LaserScannerFront,192.168.8.133,2112";
std::string port = "2112";
std::string frameName = "LaserScannerFront";
int timelimit = 5; int timelimit = 5;
std::string scannerType = "sick_tim_5xx"; std::string scannerType = "sick_tim_5xx";
double angleOffset = 0.0; double angleOffset = 0.0;
...@@ -144,7 +142,7 @@ namespace armarx ...@@ -144,7 +142,7 @@ namespace armarx
double timeIncrement = 0.1; double timeIncrement = 0.1;
}; };
Properties properties; Properties properties;
SickLaserScanDevice scanDevice; std::vector<SickLaserScanDevice> scanDevices;
LaserScannerUnitListenerPrx topic; LaserScannerUnitListenerPrx topic;
//HeartbeatComponentPlugin heartbeat; //HeartbeatComponentPlugin heartbeat;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment