Is there a topic or service to know when visual odometry estimation is lost in RTAB-MAP? - kinect

I am using rtabmap to estimate odometry from visual slam. When odometry is lost, the rtabmapviz screen becomes red. I am looking for one way to know when I lose odometry in my code e.g. a topic to subscribe or something like that.
Thanks for your help
(edit)
I am using ROS kinetic and the following launch files:
roslaunch freenect_launch freenect.launch depth_registration:=true
roslaunch rtabmap_ros rtabmap.launch localization:=true rtabmapviz:=false rviz:=true

Based on your question, I assume you're using the rtabmap_ros pkg, specifically one of the Visual Camera/Lidar Odometry nodes. They all publish the topic odom (nav_msgs/Odometry) and the topic odom_info (rtabmap_ros/OdomInfo). In the rtabmap_ros/OdomInfo msg, is the element bool lost, which reports if the current odometry is lost or not.
Also, the null transform is published on the topic odom instead of the (lost) odometry (by default, param option).

Related

Configure .eds file to map channels of a CANopen Client PLC

In Order use a PLC as a Client (formerly “Slave”), one has to configure the PDO channels, since the default values of the manufacturer are often not suitable. In my case, I need the PDOs so send INT valued instead of the default UNSIGNED8 (see. Picture).
Therefore my question: What kind of workflow would you recommend, to map the CANopen Client PDO channels?
I found the following workflow suitable, however I appreciate any improvements and recommendations from your side!
Start by locating the .eds file from the manufacturer. The image show this in the B&R Automation Studio Programming Environment
Open the file in a eds. Editor. I found the free Vector CANEds Editor very useful. Delete all RxPODs and RxPDO mappings that you don’t need.
Assign the needed Data Type (e.g. INTEGER16) and Channel Name (“1 Byte In (1)”).
Add the necessary PDOs and PDO mapping from the database. (This might actually be a bug, but if you just edit the PDOs without deleting and recreating them, I always receive error messages)
Map the Date to the Channels
Don't forget to write the number of channels in the first entry (in this image: 1601sub0)
Check the eds file for Errors (press F5) and copy&paste the eds file to the original location point 1.)
Add the PLC Client device in Automation Studio and you should see the correct mappings.
(PS: I couldn't make the images smaller ... any recommendations about formating this question are welcome!)

Serial communication with Xtralien potentiostat not working?

I am trying to set up a potentiostat Xtralien by Ossila with LabView.
The way the instrument works in a string-in, string-out, so far so good.
The built-in code examples that are provided by the manufacturer contain firstly a string-in, string-out LabView program and secondly a preliminary console to record an I-V sweep (https://www.ossila.com/pages/basic-xtralien-commands-in-labview, https://www.ossila.com/pages/xtralien-x100-command-list). In the string interface, I can enter 'CLOI hello' and the device responds 'hello world', so far so good. If I proceed any further and send i.e. a 'smu1 measurev' command connecting to some photodiode, I just receive a near-zero value back, setting 'smu1 set voltage 0.5' or similar does not lead to an output voltage either. Running the sweep program over said photodiode gives noise in the µA range.
EDIT: All involved hardware components were double-checked.
Where am I doing something wrong? Is the error arising from communication errors or...? Has someone experienced this so far?
Received the answer from the Ossila support. The Xtralien X200 drivers were recently updated (http://files.ossila.com/source-measure-unit/Ossila-X200-SMU-Instr.zip), and you need to switch on each SMU channel sperately. This was implemented in a subVI in the Instrumentation -> X200.
Hope I helped all who get a similar problem in the future!

Monitor process api calls windows 7 vb.net/C# or C++

Currently i'm working on a security monitoring app that continuously monitor new processes created.
For that im using wim and event watcher, witch works fine in VB.NET.
But there are 2 features that im missing.
I need to monitor process API calls, and I've been searching the web like mad, and come up empty.
Basically i need to monitor process WaitForSingleObject, LoadLibraryA, CreateProcessW and WriteProcessMemory. And registry access/changes as well.
Im hoping this can be done without a system wide hook, but form what i can find, it cannot be done via WMI.
So the question is, how to, and what can i do with managed code.
I'm gonna focus on the second point as i don't have experience on your first.
For checking if a process is signed i am using the sigcheck.exe from Mark Russinovich, because of the various methods it uses to verify files. Some are catalogsigned, some have the key embedded, there is iirc another weird method. There is no easy way to do it yourself. Had weird false detections with trying self-built methods to cover all possibilities. Hope that info helps

MSMQ complaining about format name while reading messages

I have a non transacitonal private queue(errors) on a remote machine(10.3.35.3), running xp. I am trying to read messages from a machine which runs windows 2008.
I am using "FormatName:Direct=tcp:10.3.35.3\Private$\errors" to access the queue.
I can connect to it.
I can peek.
I have a eventHandler for ReceiveCompleted event, and it get fired once there is a message received from queue, however when I try to convert "source" object to messageQueue.
Friend Sub MyReceiveCompleted(ByVal [source] As [Object], ByVal asyncResult As ReceiveCompletedEventArgs)
Dim objMessageQueue As MessageQueue
Try
objMessageQueue = New MessageQueue
objMessageQueue = CType([source], MessageQueue)
At this point when I try to convert "source" object to MessageQueue object I got exception "The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted.".
full stack trace of exception
at System.Messaging.MessageQueue.GenerateQueueProperties()
at System.Messaging.MessageQueue.get_QueuePath()
at System.Messaging.MessageQueue.get_QueueName()
at MyReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)
I have tried different format names, no luck. can anyone please explain what is wrong in here? is there any other format name I need to use? can we know what formatname a queue will like beforehand?
Note: in here someone said to use id instead, when I look for id in properties of queue I got all 0s in "Type ID:" field.
Ok I give up on this, it is still not working becuase it is part of a very messy old code. I created my own little application(using the same code, same .net framework) and it can connect to remote queues and read/write/peek. so I believe this was an example of maintenance nightmare of a very very old code base.
during my research I have found some useful links, which may help someone who lands here in future. John Breakwell has following to contribute about remote queue
There is a new security in MSMQ4.0
A registry key in MSMQ3.0
some ports info regarding msmq
some more info about remote msmq 4.0 processing
To see if your msmq is installed in workgroup mode or other one, goto HKLM->Software-> Microsoft->MSMQ->Parameters check REG_DWORD workgroup.
1 is workgroup mode.
0 is AD mode.
and if you want to know the version of your msmq, check version section of this wiki page
I almost forgot to mention that as a rule of thumb I believe we should always read local and write remote, not other way round.

how to get errors from tileupdatemanager

In my winrt app, I am trying to update the live tile based on polled URIs. There is currently no update happening and I can't figure out how to troubleshoot. There are numerous scenarios that could be breaking things but i can't seem to find anyway to get insight into potential errors.
The TileUpdateManager seems to be a bit of a black hole that absorbs information but never lets it out.
Does anyone know of how to view errors from the TileUpdateManager?
If it interests anyone, here is my update code:
TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true);
PeriodicUpdateRecurrence recurrence = PeriodicUpdateRecurrence.HalfHour;
List<Uri> urisToPoll = new List<Uri>();
urisToPoll.Add(new Uri(#"http://livetileservice2012.azurewebsites.net/api/liveupdate/1"));
urisToPoll.Add(new Uri(#"http://livetileservice2012.azurewebsites.net/api/liveupdate/2"));
TileUpdateManager.CreateTileUpdaterForApplication().StartPeriodicUpdateBatch(urisToPoll, recurrence);
To expand on Nathan's comment, here are two steps you can take to troubleshoot:
Enter your URI straight into a browser to see the results that are returned, and inspect them for being proper XML. As Nathan points out, your URIs are returning JSON which will be ignored by the tile update manager. As a working example (that I use in Chapter 13 of my HTML/JS book), try http://programmingwin8-js-ch13-hellotiles.azurewebsites.net/Default.cshtml.
If you feel that your URI is returning proper XML, try it in the Push and Periodic Notifications Sample (Scenarios 4 and 5 for tiles and badges). If this works, then the error would be in your app code and not in the service.
Do note that StartPeriodicUpdate[Batch] will send a request to the service right away, rather than waiting for the first interval to pass.
Also, if you think that you might have a problem with the service, it's possible to step through its code using Visual Studio Express for Web running on the localhost, when the app is also running inside Visual Studio Express for Win8 (where localhost is enabled).
.Kraig