ekumenlabs / tangobot Goto Github PK
View Code? Open in Web Editor NEWAndroid app to navigate using Tango services as input.
License: Apache License 2.0
Android app to navigate using Tango services as input.
License: Apache License 2.0
Check what happens when running master on device and shutting down the app
Create a nice app logo
#63 adds a basic implementation for extrinsics transformations publisher.
It would be better to publish these transformations by reading some YAML files instead of defining them using code.
Note: This is different to the robot state publisher as it uses tf_static to publish the robot frames, and move_base (costmaps in particular) needs the transformations in tf.
#64 adds a basic implementation for a map server.
This should eventually be replaced with a module that reads an actual image with metadata.
For a first version, reading an image from app resources would do.
Currently, the code uses the odometry coming from Tango using tango_ros_node
.
For testing and comparison purposes, it would be good to be able to choose from Tango odometry and wheel odometry provided by base_controller
.
Test the application with base_controller only, running along RosApp.
Some applications in rosjava/android are available to visualize the robot in a map and send goal poses. map_nav is a good candidate, but it is outdated, and depends on packages that are outdated too in ROS kinetic.
A detailed description of the problems that the application currently has can be found here.
We should discuss and decide if it is worth the effort to get this application refurbished, or if there is a better solution for the problem.
To load configuration parameters from yaml files, Snakeyaml library seems to be a good candidate.
There are artifacts available on Maven: Snake Yaml Maven.
If the library fits the application, the problem of configuring the nodes can be considered as solved (see discussion in #10).
The roscpp_android environment uses a fixed version for move_base
and its related libraries (costmaps and planners), which are detailed in its rosinstall file.
These libraries are not the ones used in the current Kinetic release, which are the ones used for the standard turtlebot setup. They should be updated to the current versions.
To test the navigation stack on Linux, the starting point will be an operational navigation stack running with data coming from a simulator (such as Stage or Gazebo). Then, the simulation shall be removed, and the data inputs shall be replaced progressively with real data coming from a Tango device.
These are the steps to follow:
The current version of the usb_serial library is a copy from an older version of the library.
Get the current version (or a released, numbered version) and adapt the application so that it works with it.
Upload USB Serial Library to Maven (contact owner).
The USB Serial Lib code shall be removed from this project, and the proper Maven dependency shall be added to build scripts.
From #8:
When a launchfile is executed from the computer, the following error appears:
load_parameters: unable to set parameters (last param was [None]): <Fault 0: 'No such handler: system.multicall'>
This happens even with simple launchfiles like map_to_odom
from navigation_setup
.
This requires further investigation as it doesn't make running the demos possible.
This package is the main component of the navigation stack, so it requires special attention.
It consists of many plugins, which have to be cross compiled:
The navigation stack also uses some nodes which are smaller than move_base; some of them are required, others are optional.
Required:
Desirable:
Optional:
Not required:
Check if there is a way of catching this error and upstreaming it to the GUI in the released version of tango ros node.
Check if the checkbox of "don't show this again" can be fixed so that the USB permission doesn't need to be granted every time the app starts.
To run the demo completely on Android, the parameter server should be configured without the help of scripts from Linux.
From Intermodalics App.
This is a feature that the Android client application shall have.
Some parameters should be configurable from within the application. Some of them are:
#63 adds a node that is capable of publishing given transformations to tf, just as the native version for static tf publisher.
This could be an interesting contribution to rosjava; it would be nice if it could read what to transform from the parameter server or Yaml files.
The standard turtlebot running on Linux with and empty map and wheel odometry behaves different than the tangobot running the navigation stack on Android with the same configuration (Navfn & DWA local planner, standard launchfiles).
In particular, it takes more time to reach a given goal (slower movements), and it may get stuck when a goal is given behind the robot, oscillating to both sides until it aborts all plans.
These differences require further investigation.
The standard Nav Stack uses AMCL to localize within a map using a laser scan.
The Tango Point cloud can be transformed to a laser scan, but perhaps there is some other way of using Tango features to solve the problem of localizing the robot relative to a fixed frame in a map more efficiently, given that the Tango device can be localized accurately with respect to the start_of_service frame.
#41 implements a simple latching mechanism to prevent other nodes from starting and consuming parameters that were not yet loaded.
The definite mechanism to prevent this should be discussed and implemented before upstreaming the changes to rosjava.
Another candidate to archive the same goal would be a callback after all the parameters are loaded.
Many nodes of the Nav Stack (mainly move_base, but also others like robot state publishers with its descriptions) require to have access to several configuration parameters.
In Linux, this problem is addressed using launchfiles, which are not available in Android environments. Then, some other way of configuring nodes has to be implemented in Android to solve this problem.
One possible option is to create a node that reads configuration files and updates the parameter server, emulating launchfiles.
Another option is to configure the nodes by using code directly (perhaps faster to implement, but less flexible).
Currently, the UI shows the device's IP when running the master on device.
Add a text indicating that it is actually running on device next to the IP.
This issue is to keep track of high level tasks required to accomplish the final goal: a robot that navigates with an application running completely on an Android device.
The current demo running the navigation stack on the computer uses a helper script to remap topics, which runs a node that subscribes to the source topic and publishes the same information to a target topic. This is required because the move_base
launchfile belongs to a turtlebot package, which remaps cmd_vel
by default.
It would be good to remap the cmd_vel in a more efficient way. One way of doing so is using a proper mux, like in the std_turtlebot example.
Check if this is a problem when sending goals / if it can be fixed.
It may be related to robot joint state publisher (which publishes the TFs for the wheels, and is a standard turtlebot component that publishes at a lower rate).
Contribute ParameterLoaderNode to android_extras or some other public repository (to be defined).
Apache Licence can be inserted at the beginning of each of the source files (the same used for Tango Ros Streamer.
@adamantivm is that licence ok?
Currently the class extending NativeNodeMain reports an error through a custom means.
Find a more generic way to expose an error message and upstream to rosjava. Candidate: implement onError
To perform this test, some frame transformations have to be published into tf topic to correct the frames used by the Tango device and the required ones by move_base.
In particular, the Tango devices uses "start_of_service" and "device" as frames of reference, which need to be mapped to "odom" and to the robot frame.
#18 addresses this problem with some helper scripts, which take in the data published by the Tango Node, and republishes the required information.
The test result is successful: move_base can drive the robot properly using Tango odometry. The result can be visualized in RVIZ.
Create detailed tutorials in roswiki to get a tangobot setup running (detailed as Turtlebot tutorial).
A general review of the code should be performed. The module has some details that can be improved without an excessive effort.
When using Tango odometry, a message saying that the controller couldn't reach the desired frequency appears in rosout
(even if that frequency is as low as 5 Hz).
Check if this is a problem in the navigation stack behavior.
Add a snackbar to go to the Main activity on first run (currently, the "back" button has to be pressed and its confusing for a user).
A rosbag can be recorded using Linux stack, and then feed the input streams to a move_base
node running on Android. The differences in the results shall be analyzed.
Test if it works as is or if there are modifications to be done.
To be able to use this device, a mount support needs to be built (e.g. 3D printed), and the extrinsics need to be corrected in the app (and configurable to use Tango Tablet as well).
ParameterLoader runs in a thread separate to the main one, and while it's loading the parameters, move_base
node may start and attempt to look for the required configuration.
Some mechanism needs to be implemented to ensure that the parameters are loaded before the nodes that consume them are launched.
The base controller module's source code is publicly available, so all the modifications for this project shall be properly contributed to base controller's repo.
The source of the module shall be removed from this project so as not to replicate existing code.
The MasterChooser integrated with the settings activity could be a good candidate to upstream to RosJava.
The layout xml file has to be modified so that in can be included anywhere for that purpose.
When I tried to add arm64-v8a
, I got an error from Gradle saying that it is not supported.
Apparently, compileSdkVersion
has to be upgraded to 21 to make it work. When I upgraded it, I got a compilation error coming from roscpp_android_ndk (some header file that was not found). I probably will need to recompile the ROS packages adding the new architecture to make it work.
I also read that for Coconut devices, armeabi-v7a
seems to be fine (see here).
We should decide at some point if it is worth upgrading the sdk version and solving that compilation error to add arm64-v8a
to abiFilters in gradle configuration.
The install instructions can be improved to make easier to install and run the app without using so many external references, and specifying the proper commands instead.
Tango odometry is more accurate than wheel odometry.
Some research has to be done to figure if it is worth doing fusion with both odometries, correcting wheel odometry with Tango odometry, or just using Tango odometry alone.
It would be nice to have indicators to check the app status.
Here's some of the indicators proposed:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.