Skip to content
This repository has been archived by the owner on Sep 21, 2018. It is now read-only.

Web Frameworks Library for MRPT (Rachit Tibrewal) #6

Open
jolting opened this issue Apr 23, 2018 · 99 comments
Open

Web Frameworks Library for MRPT (Rachit Tibrewal) #6

jolting opened this issue Apr 23, 2018 · 99 comments

Comments

@jolting
Copy link
Member

jolting commented Apr 23, 2018

Initial Description

Robots are slowly becoming a part of the internet of things, and easy control and universal access will be a step in future of robotics. MRPT’s Web Framework Library should address this problem.A lightweight publisher/subscriber mechanism needs to be created for MRPT. The C++ server library and the javascript library will then leverage this to create further applications. There will be two libraries, a C++ server library for RPC on the robot. Another will be a javascript library which provides modules for such procedure calls.This task involve serialization of existing mrpt objects for JSON transfer, RPC protocol, websocket setup, 3D rendering of objects in js, reusable js components for sending and receiving data from user created app where the user is largely benefitted from easy to use library methods and objects.


@rachittibrewal
Copy link

Hello @jolting, @jlblancoc Thanks for giving me this opportunity. I am very excited about the project and working with mrpt community. I would like to contribute to some issues and read codebase till May 5, as my exams will continue till that date, after that I will start working towards the first phase.

@jolting
Copy link
Member Author

jolting commented Apr 24, 2018

Hi @rachit173,
At this point I would just like to confirm that you're able to build MRPT. If you're using Linux I would recommend Ubuntu 18.04 since the compiler is already up to date. On Windows of course you'll need MSVC 2017. I don't personally develop on OS X, so I'm very little help there.

@y73isc00l
Copy link

y73isc00l commented Apr 25, 2018 via email

@rachittibrewal
Copy link

Sorry for the confusion, i am creating by using my alternate GitHub account y73isc00l.I will continue to use rachit173. I am installing 18.04 now.

@rachittibrewal
Copy link

@jolting I have built mrpt-2.0.0 from source on Ubuntu 18.04. Building the apps was giving error so I turned it off for build. Also I tried to install ROS(kinetic-kame) on 18.04 but there seems to be no version available, is there a workaround?

@jolting
Copy link
Member Author

jolting commented Apr 27, 2018

ROS melodic is not ready yet. You can install a few packages from the archive.

If you need to run ROS kinetic you can use a docker container.
http://wiki.ros.org/docker/Tutorials/GUI

Do you need that to compare against ros3djs?

@rachittibrewal
Copy link

rachittibrewal commented Apr 27, 2018 via email

@jolting
Copy link
Member Author

jolting commented Apr 27, 2018

Sure. MRPT does have some ROS bindings.

https://github.com/mrpt-ros-pkg/mrpt_navigation

ROS has a lot of packages and a large community of users. It's nice to be able to take advantage of all of that. I use ROS all the time. I encourage you to learn all you can from what the RobotWebTools guys have done with rosbridge_server and ros3djs.

However, we do want you to implement an MRPT specific version that is not coupled to ROS. Here are a few reasons:

  1. I think potentially a non-ROS solution can be much more cohesive and usable with MRPT.
  2. We want it to be much more portable than ROS.
  3. PUB/SUB and RPC should be optimized for web. For example, rosbridge_server naively converts everything to JSON. This might not always be the right thing to do. You can send binary blobs over a websocket.

@jlblancoc
Copy link
Member

Hi @rachit173 !

Also I tried to install ROS(kinetic-kame) on 18.04 but there seems to be no version available, is there a workaround?

ROS melodic will be available within a few weeks (during May 2018).

I agree with @jolting 's view of making the web interface independent of ROS (although it could be later integrated as a ROS node) for the sake of portability; also, using all format options should be considered for the transport layer: binary blobs, JSON,... The former will probably be much more efficient, so in case of using JSON, there should be good reasons to pick that choice.
Cheers.

@rachittibrewal
Copy link

Hi
My exams are almost over, I have one easy paper left for May 9. So I can start with work. Should I start with the first phase work?

@jolting
Copy link
Member Author

jolting commented May 5, 2018

Sure. That's the occupancy grid task right?

@rachittibrewal
Copy link

It is the publisher/subscriber mechanism for MRPT.

@jolting
Copy link
Member Author

jolting commented May 5, 2018

Cool. You may begin coding any time you wish.

@jolting
Copy link
Member Author

jolting commented May 10, 2018

@rachit173
Do you have some time in the next few days to have a quick video chat to discuss your project?

I'm in California. I presume you're in India, so your morning will probably works best for me.

@rachittibrewal
Copy link

rachittibrewal commented May 10, 2018 via email

@rachittibrewal
Copy link

@jolting @jlblancoc
For the publisher subscriber pattern , I am confused between brokered systems(like ROS with the roscore or master) or brokerless system. In ROS the broker accepts all the publishers messages and distributes the messages to subscribers requesting the message. The master can also be used for RPC. So should i continue with a brokered system like ROS or are there some other design patterns which would be more advantageous for our purpose of web apps?

@jolting
Copy link
Member Author

jolting commented May 12, 2018

ROS core doesn't distribute the messages. It acts like a name service allowing nodes to connect with each other, but the nodes do talk directly with each other for performance reasons. Messages aren't relayed.

ZeroMQ has a good description of broker vs brokerless.
http://zeromq.org/whitepapers:brokerless

This project isn't intended to reinvent ROS. There are two actors in this system. A web browser and an MRPT server.

A single point to point data channel such as a websocket doesn't need a broker. You can still implement pub/sub at the protocol layer.

See ethereum:
https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB

@rachittibrewal
Copy link

cppethereum is great but it does not have websocket support unlike goeth, but basic code of cppethereum rpc with beast library could solve this.
Also I have created mrpt-server personal repo, I will be pushing code to it and have started with basic configuration file till I get a clarity of the RPC. Should I continue with my repo or can you create a new repo for mrpt-server.

@jolting
Copy link
Member Author

jolting commented May 14, 2018

Ethereum is just an example of RPC. I would not suggest adding that as a dependency.

I prepared this template a while back:
https://github.com/MRPT/mrpt-web

You can fork that or start your own.

@rachittibrewal
Copy link

Update:
forked mrpt-web.
created a sync web server for ws using beast
The ws connection works in chrome but firefox does not.
For firefox, the site says that SSL is required thus, I will create a separate app for SSL.
Appart from synchronois, asynchronous and coroutine ws server, much of the code is present in beast documentation.
I am thinking of placing the different servers in CWebSocketServer.h file

@jolting
Copy link
Member Author

jolting commented May 16, 2018

Ok. You can send a pull request to the mrpt-web repo when you want to review your changes.

@rachittibrewal
Copy link

@jolting @jlblancoc I have implemented jsonrpccpp using websockets and pushed it to my fork. The code is based mostly on cppethereum and works with jsonrpc-2.0 js client (I tried with plain websockets). However, it currently does not support SSL and thus does not work with firefox sometimes. I am currently working on it. Currently the file implementing websocket server is CWebSocketJsonRpcServer.h but I suspect that it is not doing a clean exit and thus if I immediately run the server on the same port it gives errors but after sometime it works fine. Any pointers regarding that?

Regarding dependencies, beast has a header files in beast/experimental which were giving error when I removed the included files.

Also regarding licenses and credits, I have copied lot of code from cppethereum, should i just include their license or put it at start of every code file used?

@jolting
Copy link
Member Author

jolting commented May 22, 2018

I have implemented jsonrpccpp using websockets and pushed it to my fork. The code is based mostly on cppethereum and works with jsonrpc-2.0 js client (I tried with plain websockets).

To avoid licensing issue you should rewrite the sections you based on cppethereum. Code derived from GPL code cannot be BSD code.

Regarding dependencies, beast has a header files in beast/experimental which were giving error when I removed the included files.

You should use beast as it is shipped with boost 1.66 or later.

@rachittibrewal
Copy link

Update : Pushed websocket with SSL.
Reading up on rosbridge protocol
It has the following operations:

  • advertise
  • unadvertise
  • subscribe
  • unsubscribe
  • call_service
  • advertise_service
  • unadvertise_service
  • service_request
  • service_response
    I was also thinking about implementing a similar protocol. Are there changes required to protocol which will
    make it more efficient ? Can you give me a brief idea about what kind of design would be good design

@jolting
Copy link
Member Author

jolting commented May 25, 2018

Minimalism is key here.

Think of a way to version the protocol. There a reason why MRPT can still read old data files despite all the changes over the years. Backward compatibility requires some thought. I would start with some way of versioning the protocol.

Services are actually ROS's way of doing RPC Request/Reply. I would look at that next.

The following are related to ROS's pub/sub

advertise
unadvertise
subscribe
unsubscribe

I certainly wouldn't start with Pub/Sub.

@rachittibrewal
Copy link

check this link for mrpt-web protocol
https://github.com/rachit173/mrpt-web/wiki
I have added the protocol associated with mrpt-web, method call protocol has already been implemented. We can decide the protocol in the wiki and it will also serve as basic documentation. Please suggest changes in protocol there.
Also I am confused about converting different message or parameters like costmap, point, laserscan data type to json fields for the transport. Should i use ROS's message type as they already have this available or some other package.
Once this conversion package is done, I will create a basic app to demonstrate the method call protocol.

@jolting
Copy link
Member Author

jolting commented May 27, 2018

I have added the protocol associated with mrpt-web, method call protocol has already been implemented. We can decide the protocol in the wiki and it will also serve as basic documentation. Please suggest changes in protocol there.

Awesome. Documentation is key.

Also I am confused about converting different message or parameters like costmap, point, laserscan data type to json fields for the transport. Should i use ROS's message type as they already have this available or some other package.

This should be done for MRPT data structures.

I think it should be possible to create something like CArchive for JSON.
https://github.com/MRPT/mrpt/blob/master/libs/serialization/include/mrpt/serialization/CArchive.h

@jlblancoc
Copy link
Member

👍 for starting documenting things since the beginning in a wiki. Keep that!

I think it should be possible to create something like CArchive for JSON.
https://github.com/MRPT/mrpt/blob/master/libs/serialization/include/mrpt/serialization/CArchive.h

Hmmm... After this GSOC project, there will be THREE different serialization protocols:

  • Via CArchive << & >> operators. See docs.
  • MEXPLUS + writeToMatlab() to (de)serialize to MATLAB. See example.
  • Whatever is done to handle JSON.

It would be fantastic if we could somehow centralize all serialization methods in one single place, as far as it may be possible without breaking what currently works.

A first simple idea (that needs more thinking, I don't mean it's optimal) would be adding new methods to CArchive to writeXXX() and readXXX() for XXX=mex|json, for example. The methods should accept variables and their "name".
Another place to look for unification, is the triplet of virtual methods of CSerializable. I'm not sure if it would be feasible (it depends on whether JSON serializations require the variable names in addition to their values), but it would be fantastic to allow existing code to automatically work if the CArchive that is passed had some "flag" to reflect which serialization protocol is desired: binary or JSON (MEX is so different that I don't think we have chances of unifying it here...).

Notice that CArchive is the place where "serialization" happens. That class actually is in charge of interpreting data to/from a text or binary stream, which may be an underlying mrpt::io::CStream or a std::stream.

@jolting
Copy link
Member Author

jolting commented May 27, 2018

it depends on whether JSON serializations require the variable names in addition to their values

Yeah JSON needs a schema.

A solution could look like this:

template <typename SCHEMA_CAPABLE>
SCHEMA_CAPABLE CPose2D::serializeTo() const
{
  SCHEMA_CAPABLE out; 
  out["x"]    = m_coords[0];
  out["y"]    = m_coords[1];;
  out["phi"] = m_phi;
  return out;
}

Then you can do.

  CPoint2D point;
  auto json_point = point.serializeTo<Json::Value>();

A little bit more complicated version would be

template <typename SCHEMA_CAPABLE>
SCHEMA_CAPABLE SomeObject::serializeTo() const
{
  SCHEMA_CAPABLE out;
  out["nested"]    = m_somenested.serializeTo();
  return out;
}

Clearly, this could get a little bit more declarative, but might as well start with something simple.

@rachittibrewal
Copy link

I am facing the following error

CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `mrpt::serialization::CSerializable::~CSerializable()':
main.cpp:(.text._ZN4mrpt13serialization13CSerializableD2Ev[_ZN4mrpt13serialization13CSerializableD5Ev]+0xf): undefined reference to `vtable for mrpt::serialization::CSerializable'
CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `mrpt::poses::CPoint2D::operator delete(void*)':
main.cpp:(.text._ZN4mrpt5poses8CPoint2DdlEPv[_ZN4mrpt5poses8CPoint2DdlEPv]+0x14): undefined reference to `mrpt::aligned_free(void*)'
CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `mrpt::serialization::CSerializable::CSerializable()':
main.cpp:(.text._ZN4mrpt13serialization13CSerializableC2Ev[_ZN4mrpt13serialization13CSerializableC5Ev]+0x1b): undefined reference to `vtable for mrpt::serialization::CSerializable'
CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `mrpt::poses::CPoint2D::CPoint2D(double, double)':
main.cpp:(.text._ZN4mrpt5poses8CPoint2DC2Edd[_ZN4mrpt5poses8CPoint2DC5Edd]+0x36): undefined reference to `vtable for mrpt::poses::CPoint2D'
main.cpp:(.text._ZN4mrpt5poses8CPoint2DC2Edd[_ZN4mrpt5poses8CPoint2DC5Edd]+0x44): undefined reference to `vtable for mrpt::poses::CPoint2D'
CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `CRPCRawLog::Playlist_GetItems()':
main.cpp:(.text._ZN10CRPCRawLog17Playlist_GetItemsEv[_ZN10CRPCRawLog17Playlist_GetItemsEv]+0x43): undefined reference to `Json::Value mrpt::poses::CPoint2D::serializeTo<Json::Value>() const'
CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `mrpt::rtti::TRuntimeClassId const* mrpt::rtti::CLASS_ID_impl<mrpt::rtti::CObject>()':
main.cpp:(.text._ZN4mrpt4rtti13CLASS_ID_implINS0_7CObjectEEEPKNS0_15TRuntimeClassIdEv[_ZN4mrpt4rtti13CLASS_ID_implINS0_7CObjectEEEPKNS0_15TRuntimeClassIdEv]+0x5): undefined reference to `mrpt::rtti::CObject::GetRuntimeClassIdStatic()'
CMakeFiles/mrpt-ws-rpc.dir/main.cpp.o: In function `mrpt::poses::CPoint2D::~CPoint2D()':
main.cpp:(.text._ZN4mrpt5poses8CPoint2DD2Ev[_ZN4mrpt5poses8CPoint2DD5Ev]+0xf): undefined reference to `vtable for mrpt::poses::CPoint2D'
main.cpp:(.text._ZN4mrpt5poses8CPoint2DD2Ev[_ZN4mrpt5poses8CPoint2DD5Ev]+0x1d): undefined reference to `vtable for mrpt::poses::CPoint2D'
collect2: error: ld returned 1 exit status
apps/mrpt-ws-rpc/CMakeFiles/mrpt-ws-rpc.dir/build.make:105: recipe for target 'apps/mrpt-ws-rpc/mrpt-ws-rpc' failed
make[2]: *** [apps/mrpt-ws-rpc/mrpt-ws-rpc] Error 1
CMakeFiles/Makefile2:140: recipe for target 'apps/mrpt-ws-rpc/CMakeFiles/mrpt-ws-rpc.dir/all' failed
make[1]: *** [apps/mrpt-ws-rpc/CMakeFiles/mrpt-ws-rpc.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

main.cpp

#include <jsonrpccpp/server/abstractserverconnector.h>

#include <mrpt/poses/CPoint2D.h>
#include <mrpt/serialization/CSerializable.h>
#include <mrpt/rtti/CObject.h>
#include <mrpt/web/CWebSocketUtility.hpp>
#include <mrpt/web/CWebSocketAdvanced.h>
#include <mrpt/web/CModularServer.h>

#include <CRPCRawLogFace.h>

#include <cstdlib>
#include <functional>
#include <thread>
#include <string>
#include <mutex>
#include <memory>

using namespace mrpt::poses;
class CRPCRawLog : public CRPCRawLogAbstract
{
public:
  virtual RPCModules implementedModules() const override
  {
    return RPCModules{RPCModule{"CRPCRawLog","1.0"}};
  }
  Json::Value Playlist_GetPlaylists() override
  {
    Json::Value ch;
    ch[0]["name"] = "Jabberwock";
    ch[0]["chapter"] = 1;
    ch[1]["name"] = "Cheshire Cat";
    ch[1]["chapter"] = 6;
    ch[2]["name"] = "Mad Hatter";
    ch[2]["chapter"] = 7;

    // create the main object
    Json::Value val;
    val["book"] = "Alice in Wonderland";
    val["year"] = 1865;
    val["characters"] = ch;
  return ch;
  }
  Json::Value Playlist_GetItems() override
  {
   //Added this code
    CPoint2D point;
    auto jsonPoint = point.serializeTo<Json::Value>();
    return jsonPoint;
  }
};

CPoint2D.cpp

template <typename SCHEMA_CAPABLE>
SCHEMA_CAPABLE CPoint2D::serializeTo() const
{
	SCHEMA_CAPABLE out;
	out["x"] = m_coords[0];
	out["y"] = m_coords[1];
	return out;
}

Also since templatized virtual functions are not allowed, how to add it to CSerializable.h

@jolting
Copy link
Member Author

jolting commented Jul 19, 2018

If you get done with the rawlog viewer, the documentation and video tutorials. Then you can work on the Reactive Navigation demo.

@rachittibrewal
Copy link

I will start documentation, build configuration of everything.

@rachittibrewal
Copy link

rachittibrewal commented Jul 20, 2018

Started with something basic:
ESDoc for automated build of source documentation and published it on http://mrpt-web.surge.sh/
thinking of adding tutorials and further examples here itself
added CI for docs on branch dev-docs
Improved docs, added examples (code snippets) to many of the classes.

@jlblancoc
Copy link
Member

ESDoc for automated build of source documentation and published it on http://mrpt-web.surge.sh/

👍 looks great!

Shouldn't that also include:

  • Short instructions/(link to)examples on how to use those classes in real apps?
  • Instructions to launch the RawlogViewer demo app & a link to the most relevant parts of the code?

@rachittibrewal
Copy link

Thanks, I am going to add tutorials to the manual section

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

Looks like the mrpt-web-js unit tests are still broken.

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

What do you think about specifying a directory on the server in which rawlogs will be served up from?

It is a bit awkward to have to know the name of the file on the file system.

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

I think there needs to be a method for connecting to a server other than localhost:5000.

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

For the 3d animation is there any way to move the pivot point?

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

One thing to note about the 3d scan visualization is that it is capable of rendering multiple sensors. Each sensor will have its own sensor label and have a different sensor height.

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

Let me know if the 2D plots work. I'm excited to try them out.

@rachittibrewal
Copy link

rachittibrewal commented Jul 24, 2018

I have added address bar for specifying the websocket address and port, 2d plots works in map and path generation component and will soon work for individual rawlog (debugging it).

For the rawlog address, how do you feel about sending file from client to server using websocket (we can then use file dialog box). If we wish to go with directory, then should I create a specific directory from which the server will give the list of files available for visualisation from the directory?

3d animation currently uses trackballcontrols, for changing the pivot the press the right click and move the mouse. There are other controls out there, https://threejs.org/examples/?q=controls#misc_controls_map, but have their own pros and cons.

For 3d scan visualisation, are you aware of some rawlog with multiple sensor data. Then I would check how it functions with the RawLogViewer app and modify the app for multiple sources.

@jolting
Copy link
Member Author

jolting commented Jul 24, 2018

For the rawlog address, how do you feel about sending file from client to server using websocket (we can then use file dialog box). If we wish to go with directory, then should I create a specific directory from which the server will give the list of files available for visualisation from the directory?

Just specify a directory with a list of rawlog files. That should be sufficient.

3d animation currently uses trackballcontrols, for changing the pivot the press the right click and move the mouse. There are other controls out there, https://threejs.org/examples/?q=controls#misc_controls_map, but have their own pros and cons.

Cool thanks for clarifying.

For 3d scan visualisation, are you aware of some rawlog with multiple sensor data. Then I would check how it functions with the RawLogViewer app and modify the app for multiple sources.

It's incredibly useful for a 2.5 D representation from depth cameras or the uncommon case of using multiple lidar scanners at different heights.

Sometimes the map looks different at various heights.
https://www.youtube.com/watch?v=jCFvAOuV_H8

@rachittibrewal
Copy link

rachittibrewal commented Aug 1, 2018

For building mrpt-web, serialization file CSchemeArchiveBase is required from mrpt library. How should I prepare it for merging with MRPT ? This would be required for the video demonstration, or for now I could make the video using mrpt build from my own fork.
These are the works I remember are pending :

  • I am currently facing this issue for making the main 2d plots in rawlog viewer app.
  • The video is still remaining, I have started work on it.
  • Adding extended examples to js library.
  • Rawlog loading from directory on server (only a small problem to be solved)

I wanted to finish off work by August 6. I have interviews on campus from 7 - 12 August, it would be very generous if you could help me in doing so. I would like to continue adding more features and working on the project in general after GSoC.

Also GSoC, requires a final submission, in the form of a link. Since this project spans across repositories, can you give an idea of how I should submit the link showing the details of work done. Should I setup a github page?

@jlblancoc
Copy link
Member

Hi,
On this:

Instructions to launch the RawlogViewer demo app & a link to the most relevant parts of the code?

Did you write some instructions on the ESdoc manual pages? Something really short would be enough... thanks!

On the RawLogViewer issue, I'll check my Eigen version just in case it's newer than yours (now I'm on Windows)...

@y73isc00l
Copy link

y73isc00l commented Aug 2, 2018 via email

@rachittibrewal
Copy link

Yes will push it by today (manual pages) , for launching rawalog app I am making a video.

@jolting
Copy link
Member Author

jolting commented Aug 2, 2018

I've recently opened a few of the sample RawLogs in 18.04. You do have to be careful to compile against GTK3 and there are a few tricks you need to get OpenGL to work with wayland(if you use that by default), but besides that no issues.

AFAIK, RawLogViewer doesn't have an issue with the version of Eigen that ships with 18.04.

@rachittibrewal
Copy link

rachittibrewal commented Aug 2, 2018

Update:

  • mrpt-web-js docs : added examples and brief descriptions in manual
  • Created a simple video explaining launch and functionality of rawlog-viewer.(Sorry for my poor video editing skills, i will try to make a more fun video later)
  • Started work on my final submission link.

Any pointers regarding final submission link, like what more verticals should be added, best practices would be great :)

@jlblancoc
Copy link
Member

Great video!! 👍

So, apparently you finally solved the crash problem in your rawlog-viewer app, right? It doesn't seem to crash on our tests...

@rachittibrewal
Copy link

rachittibrewal commented Aug 3, 2018

I havent been able to, will try on ubuntu 16.04

@jolting
Copy link
Member Author

jolting commented Aug 4, 2018

Good Job! I'm wondering if there is someplace we can host this as a demo.
The javascript part can go on surge.

The websocket server could be containerized.

@jlblancoc
Copy link
Member

jlblancoc commented Aug 4, 2018 via email

@jolting
Copy link
Member Author

jolting commented Aug 6, 2018

I've cloned all the wiki pages for the following repos.
https://github.com/MRPT/mrpt-web
https://github.com/MRPT/mrpt-web-js
https://github.com/MRPT/rawlog-web-ui

Furthermore, I fixed the unit test for mrpt-web-js. This now uses jest. That was fairly easy to setup.
Also CircleCI now auto deploys to @mrpt/mrpt-web package on npmjs.org. That should make using the package a little easier.

@rachittibrewal
Copy link

Thanks @jolting, I will make the report today and then can continue to work on bugs and issues, after submitting report today.

@jlblancoc
Copy link
Member

@rachit173 : I just gave you write permissions to all related @MRPT repositories, so you can directly contribute there more easily. You may (if you want) use those final URLs in your final report; your contributions are clearly identified there even if that's not your fork, as you know.

A proposal @jolting , @rachit173 : would it make sense to add TravisCI / CircleCI to https://github.com/MRPT/mrpt-web as well?

@jolting
Copy link
Member Author

jolting commented Aug 7, 2018

yes

@jlblancoc
Copy link
Member

jlblancoc commented Aug 7, 2018 via email

@rachittibrewal
Copy link

Hi, I am back, thanks for your patience and support. I have submitted report, please have a look at it.
https://rachit173.github.io/gsoc2018/

@rachittibrewal
Copy link

Thanks for the evaluation and opportunity to work with the organization. I wish to work on the existing project as well as MRPT in general.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants