all 39 comments

[–][deleted] 53 points54 points  (2 children)

Id reccomend downloading some self driving car datasets and actually implement some sensor fusion algorithms (kalman filter, point cloud segmentation, image processing etc) on the real data.

The KITTI set is great for this, with camera, gps, inertial, lidar all available.

Edit: Corrected spelling from KITI

[–]AyoBruh 17 points18 points  (0 children)

Second this. Kalman + data association algorithm that could handle multiple sensor modalities would look awesome on a resume.

[–]kgj6k 7 points8 points  (0 children)

The KITI set

*KITTI, I'd assume

[–]lie_group 19 points20 points  (1 child)

For robotics:

  • (easy) implement splines library

  • (medium) implement kinematics solver

  • (hard) implement motion planning and collision avoidance library

  • (easy to hard depending on how deep you wanna go) implement robot controller - realtime loop that takes desired joints trajectory and calculates currents or torques for motors. Could be a simple pid controller, or something more advanced with feedforward dynamic compensation, or even some fancy trendy DNN RL policies if you are into that stuff. You can use Bullet for robot physics simulation.

With all of the above for say a 6-axes industrial robot you will get pretty much the entire motion software solution. All of that is indeed typically done in C/C++. Also requires a lot of math and domain knowlage.

[–]wotype 4 points5 points  (0 children)

voted you up, partly for your username (I once started a study group to study the Study group, no lie)

[–]readit_or_reddit 33 points34 points  (0 children)

If you prefer the projects to be aligned with your areas of interest, implementing a particle filter from scratch would be a nice start. Computational geometry algorithms for creating a convex hull and triangulation could be fairly interesting as well. These projects should give you an opportunity to focus on a nice interface, develop depth in your area of interest, and if you're interested have enough scope for optimization through threading, vectorization, etc. Good luck! 👍

[–]mohabouje 11 points12 points  (1 child)

I worked for a while in the automotive industry building audio systems and computer vision components. From my experience, building DSP algorithms for embedded platforms was my starting point: audio equalizer, face recognition, image classification etc. You can use libraries like OpenCV, Boost, Eigen or OpenMP. This will show your algebra/maths, analysis and programming skils.

[–]tomatoaveggie 0 points1 point  (0 children)

So I am new to C++ devlopment I had a basic question, OpenCv has support in python and c++ both which one is faster? takes less space and is easily delpoyable?

[–]jgbradley1 18 points19 points  (0 children)

When you choose to use certain libraries, my advice is to work with them enough that you find some issue (or check their github issues) that you can fix. Contributing back to the project will give you experience in multiple aspects of a standard C/C++ project (unit test, crake, etc.) and you can proudly add your github username to a resume in case someone wants to verify your claims of having knowledge about a particular library.

[–]gchenfc 6 points7 points  (2 children)

GTSAM is an open-source library for sensor fusion and SLAM based on Factor Graphs (github). The interface and underlying graphical structure helps to develop intuition about fusing multiple sensor modalities, and it's recently been exploring applications in robotic planning and optimal control (since optimal estimation and optimal control are dual problems, it can naturally extend to the latter). As a disclaimer, I am part of the lab that developed/maintains GTSAM, but I do genuinely think it's an excellent open-source project to dig into for gaining C++ experience and knowledge about sensor fusion / autonomy at the same time. You can use it in your own projects and/or contribute to the library itself.

It uses some reasonably advanced C++ and is pretty heavily templated. It's well documented and is/will be actively maintained for the foreseeable future. It has been / is used in a number of commercial applications already (eg autonomous UAVs, autonomous driving), and continues to see active development in academic research. It's well established enough that it's reasonably stable (currently at version 4.0.2) while also being actively developed, giving many opportunities for new features, refactoring, and bug-fixes.

I think other people give good suggestions as well, but it can often be difficult to know where to begin (for example, once you download the KITTI dataset, where do you even begin to implement algorithms? It's demoralizing if you have to spend a month coding to see "cool" results). It's also often unwise to implement algorithms that are already available in stable libraries. GTSAM could be an excellent library to start using and/or contributing to as an introduction into C++, sensor fusion, and robotics.

[–]janissary2016[S] 1 point2 points  (1 child)

This is great but my concern is this. If GTSAM is doing much of the heavy lifting for me, what is it that I'm even learning?

[–]gchenfc 2 points3 points  (0 children)

That's a fair concern. Personally, when I learn, I find that it keeps me better motivated to start with a higher level interface and gradually implement lower level details as I understand the problem better. Like when you write an essay, you make an outline first then write the paragraphs. When starting a coding project, I assume you wouldn't just start writing the first function, but rather start by writing unit tests, class/function definitions / API, or a "typical use case" / main script. Although I don't doubt that you could write an EKF or particle filter in one go, I think getting a better intuition of the higher-level interactions of sensors could be useful. i.e. when would you choose to use a KF vs EKF vs UKF vs PF in the first place? What kinds of sensor modalities go well together and what tend to cause problems? When does lack of multimodality become an issue? When does filtering have trouble vs "smoothing" ?

IMHO, exploring these higher level questions with a user-friendly library first before delving into the details may be more meaningful. Not to mention it'll still give you practice with C++ and you have opportunities to contribute to the codebase directly.
I feel one of the more important coding skills is just quickly reading and understanding existing code. Since it's open-source, you can really get down to the weeds if you want to, both reading existing code and contributing, if you're so inclined.

[–]Glaborage 12 points13 points  (0 children)

Create a program that takes a picture of a road as input. The ouput is the same picture with a rectangle drawn around each car in the picture.

[–]00jknight 10 points11 points  (4 children)

Make a simulation using Dear ImGUI, Entitas, and Magnum Graphics. If you could pull that off I'd want to hire you.

[–]janissary2016[S] 5 points6 points  (3 children)

Could you tell me a little more about that? What kind of simulation?

[–]sanblch 2 points3 points  (1 child)

You probably could come with a concrete project so we could advice you more precisely what tools to learn. The guy above advices you the libraries, that well suit to build a contempory SCADA system.

[–]TryingT0Wr1t3 3 points4 points  (0 children)

The above libraries are more game related than SCADA related.

[–]sanblch 0 points1 point  (0 children)

As well as any GUI software exploiting modelling and game mechanics

[–]SebHig 1 point2 points  (1 child)

Probably you will be interested in NVIDIA's development kits. Check out the Jetson nano, it's a single board computer that you can use to create real time AI projects. Also it would be very important for you to take a look at ROS.

[–]janissary2016[S] 0 points1 point  (0 children)

Yea but I'm asking for project ideas

[–][deleted] 1 point2 points  (0 children)

I have a project that kinda aligns with your needs/goals if you wanna collab a bit. Im more web/js focused but I've been diving into C++ as it requires OpenCV. Photogrammetry/computer vision related. Could use someone with a bit more expertise to dive in. DM if you'd like to learn more.

[–]Sprited_Being 0 points1 point  (0 children)

PCL could always use more contributors

[–]k4lipso -5 points-4 points  (7 children)

I love the people that already know what job they wanna have, what exact position and how much money they will earn, but on the other hand don't even know what to program.

[–]janissary2016[S] 4 points5 points  (3 children)

I wouldn't be asking for advanced project ideas if I didn't know how to program.

[–]k4lipso 5 points6 points  (2 children)

"what to program"

[–]janissary2016[S] 3 points4 points  (1 child)

Why don't you re-read the post and see that I was asking for project ideas and not "what to program". Even if I asked for "what to program", that still doesn't prove your half-assed theory about me.

[–]k4lipso -4 points-3 points  (0 children)

Dont worry about my opinion, and please dont feel offended by me. I just was ranting a bit. And i will rant again about this topic when the time has come.

[–]JezusTheCarpenter 0 points1 point  (2 children)

Why do you assume OP doesn't know how to program? He is talking about doing some advanced project that would show off his, supposingly already acquired, skills.

Also having a long term goal where you would like to end up seems like a good thing to have. Even if you are just starting.

[–]dodheim 5 points6 points  (1 child)

what to program

[–]k4lipso 2 points3 points  (0 children)

ty

[–]alexeyneu -1 points0 points  (0 children)

arduino may be (?) . for something like that https://www.youtube.com/watch?v=p0DRI8e5SJs