A 2D/3D mapping/scanning project consisting off:
Robot side code is really a bunch of super-simple programs which I call modules. Each of those programs works perfectly well from the command line without the rest of the project. The sole exception is ev3control module which enables/disables/monitors other modules. The repository for robot side code is ev3dev-mapping-modules.
The cross-platform visualization is a Unity project that can plot the readings in real-time and/or control the robot. Like other projects written in Unity it works on more than 10 platforms, in theory at least. Unity has also a nice abstraction for input so robots can be controlled with keyboards/pads/mice/wheels/mobiles and so on. The repository for cross-platform visualization is ev3dev-mapping-ui.
I try to keep the budget of the project low, around 400$ (360€) including EV3 and motors.
The meta-repository of the project is ev3dev-mapping.
This is my personal project. While I am quite happy to share the results, please keep in mind that I am pursuing my own goals here.
The 3D examples are X3D models.
You can interact with the scenes with your mouse and keyboard:
Example Phase II raw scan
Example Phase II result + MeshLab surface reconstruction
The Phase I is finished with results:
The Phase I robot in action:
Phase II is functionally finished now with results:
The Phase II robot in action:
Information from 10 Aug. 2016.
Phase II is functionally finished. I am tidying up the code. It will take some time:
Phase III is in plans but I need a break now.
odometry module sends timestamped position and heading data to the
odometry component. Position and heading are reflected in the UI.
The data is kept in
position history component in circular buffer.
laser module sends timestamped data to the
laser component. The
laser component grabs position snapshots in required timeframe from the
position history component.
The position and heading data is interpolated individually for each laser reading. Once the data is ready it is reflected in the UI.
drive component translates input from the user (keyboard, pad, numerical, …) using the motion model and sends it to the
drive module controls the motors.
control component and the
control module are not in the scheme for clarity. The
control component sends to
control module requests to enable/disable modules.
control module replies with module states.
Using the XV11 Lidar tutorial has information on electrical/mechanical XV11 Lidar interfacing.
Phase II key parts:
One XY-plane lidar is enough for 3D scanning. The XZ-plane lidar is for orientation and Phase III project.
MeshLab is a great UI tool for post-processing point clouds exported from ev3dev-mapping-ui. Its functionality includes normals calculation, surface reconstruction and export to U3D (for 3D pdfs), X3D (for 3D on the web) and other common 3D formats.
AOPT is a great command-line tool for optimizing X3D models for the web. It is part of InstantReality virtual/augmented reality framework. One way to share X3D content on the web is using X3DOM which is supporting implementation in ongoing Web3D and W3C discussion on declarative 3D content in html.
If you have some question or problem open an issue in one of the ev3dev-mapping project repositories.
ev3dev-mapping - the project meta-repository
ev3dev-mapping-modules - the robot modules repository
ev3dev-mapping-ui - the cross platform UI repository
ev3dev-mapping-ui-udp - the recorded UDP communication repository
ev3dev-mapping-results - the results with explained pipelines repository
xv11lidar - C/C++ library repository
mi-xg1300l - CruizCore XG1300L driver documentation
X3DOM - open-source framework for declarative 3D graphics on the Web
Using the XV11 Lidar tutorial - the lidar integration with EV3
xv11hacking - the xv11hacking page
How to interface XV11 LIDAR to EV3 using ev3dev - video on interfacing the lidar
EV3 Gyro vs CruizCore XG1300L vs Odometry - Position Estimation - video on position estimation
3D mapping/scanning project with ev3dev OS and Unity UI - phase II robot in action
Unity - the Unity engine
MeshLab - open source system for the processing of 3D meshes
InstantReality - framework for Virtual Reality (VR) and Augmented Reality (AR)
X3D - ISO standard for 3D content suitable for the web
U3D - Ecma standard for 3D content supported natively by pdf format
WebGL - cross-platform web standard for a low-level 3D graphics API
W3C - the main organization behind World Wide Web standards