Skip to content

Instantly share code, notes, and snippets.

@ksakash
Last active August 27, 2020 14:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ksakash/e3ea536981d9c8ab88c98766ff41d04b to your computer and use it in GitHub Desktop.
Save ksakash/e3ea536981d9c8ab88c98766ff41d04b to your computer and use it in GitHub Desktop.
Final Report GSoC 2020

Final Report

Student: Akash Kumar Singh

1. Python3 binding for InnerModel Library

Mentors: Luis J. Manso, Esteban Martinena, Ramon Cintas
Link to Commits: https://github.com/ksakash/innermodel-python3/commits/master
Link to Codes: https://github.com/ksakash/innermodel-python3

Summary

RoboComp is a framework to develop software for a robot in the easiest way possible using .cdsl and components. Like many other robotics frameowrks it also provides a way of ones code in the fastest and most effective way possible, using simulators. RoboComp has its own inhouse simulator which uses InnerModel lib to represent a scene. InnerModel lib is a C++ library which uses openscene graph to render a scene described by a xml file. InnerModel uses various classes like InnerModelCamera, InnerModelLaser, etc. to store all the information, provided by the scene in xml file, in InnerModel class. So anyone who is trying to interact with the simulator have to use this library.

C++ as a programming language comes in handy in case of performance-oriented applications, for example, a simulator. But when it comes to rapid prototyping of applications and ease of use of APIs, it lags behind other languages like python which is one of the most widely used languages just because of this reason and also due to the plethora of libraries that it provides. So, binding the C++ APIs and exposing them to the python interface can be helpful in extending the use of innermodel lib to beginner developers with minimal knowledge of programming. By exposing C++ APIs to python we are achieving two things at the same time: getting the performance from C++ and ease of use through python, which can also increase contributions from the dev community and later help in the development of innermodel lib or robocomp in general.

According to the intial plan we were going to expose the existing C++ APIs to python by using C++ binding libraries such pybind11 or boost-python but upon little consideration and discussion we decided to simply write the whole library from scratch in python which also proved to be easier than the initial plan.

Work Done

  • Ported the C++ class design to Python3
  • Designed from scratch InnerModelViewer class in Python
  • Enabled headless rendering in InnerModelViewer
  • Enabled real time control of a MultiLinkBody
  • Implemented sensors like camera, IMU, pointcloud, laser
  • Inline documentation in code

Work Left

  • Change the point of view of the debug window for the simulator using mouse action in InnerModelViewer
  • More test cases for InnerModel lib

Implementation Details

To know more about the implementation detail one can look here.

Demos: https://www.youtube.com/playlist?list=PLRhBKSmnoOjJMXw_s4ken_LUt4V1cc5Ki
Pull request for the merger code: robocomp/robocomp#276

2. Adding support for ROS2 in robocompdsl

Mentors: Francisco M. Rico, Luis J. Manso
Link to Commits: https://github.com/ksakash/robocompdsl/commits/master
Link to Codes: https://github.com/ksakash/robocompdsl

Summary

robocompdsl is a tool to generate a component from a .cdsl file. At the time robocompdsl was quite basic, only able to generate components with ICE middleware and the parser was quite broken. It couldn’t even do the things it was supposed to do like creating components with ROS middleware. This project aimed to endow robocompdsl with the ability to generate ROS1/ROS2 components based on CDSL descriptions.

Work Done

  • Fixed the implementation of ROS1 component generation through robocompdsl
  • Implemented a new design for the component with ROS1/ROS2 as a middleware
  • Added support for ROS2 in robocompdsl

Work Left

  • Write unit tests for testing ROS1/ROS2 components
  • Runtime testing for ROS1/ROS2 components

Possible Improvements and Unexecuted Ideas

  • To implement template for converting ROS msgs into ICE data type

Implementation Details

To know more about the implementation detail one can look here.

Demos: https://www.youtube.com/playlist?list=PLRhBKSmnoOjJMXw_s4ken_LUt4V1cc5Ki

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment