I am a ROS beginner. I have a basic understanding of Publishers, Subscribers, Services, Transforms, Gazebo and Rviz. I want to increase my skillset. I can not apply for an internship because I need more experience. Hence, I want to start contributing to open source projects. How do I begin?
Hi, it’s great you’re thinking about contributing!
The starting point should be https://www.ros.org/contribute/ , but I’d say it’s not much helping.
At least in moveit, they try to guide beginners to issues that should be easily crackable, e.g. https://github.com/ros-planning/moveit/issues?q=is%3Aopen+is%3Aissue+label%3A"simple+improvements" . You can try searching other ROS repos for similar tags like first-timer-only. Another thing to try is https://github.com/search?q=hacktoberfest+ros .
The core ROS repos (e.g. ros/ros_comm) do not have such tags, but they also usually require deep understanding of the concepts, thus they’re probably not such a good place for new contributors.
There might be some easier or convenience stuff in repos like https://github.com/ros/geometry2 . But generally, I’d advise you to pick a few parts of ROS that are of special interest to you (e.g. because of your target application) and look at the related issues. The best motivation is to work on things that are blocking your development
And beware that most ROS repos’ contribution guidelines require you to first send the contribution to the latest branch of development (which is usually called noetic-devel or so), and once it is accepted there, it can be backported to older distros. So, doing your contributions on ROS Noetic is the safest option (or, in case of ROS 2, ROS 2 Foxy or Rolling).
The way it works in the larger world of Open Source is that you have some project and are using some open-source software to do it and have run into a bug or a limit. So you fix the bug or add a feature you, yourself need.
As an example, sometime about mid-2021 I will really be wanting micro-ROS to be running on Arm’s “mbed” OS. I expect I might have to look into porting it. And just last night I fixed a simulator I was using and tomorrow I’ll have a pull request for the author. That is how it mostly works, You run into some limit, fix it and then send in the fix.
One other thing that can be educational and helpful to others is to implement a project, get it to not only work but be very clearly written, and then turn it into a tutorial. Do something that is not already done. Many others would like to see a good well-documented project where (say) a toy $200 robot arm and a cheap webcam is used to find and grasp objects.
Or write a controller for different kinds of robot mobile platforms. Wat about Ackerman steering where both front and rear wheels are steerable? or a Mars rover-like 6 wheel system. There are many small projects to do. Put these on your own Github and web page
I guess this is the hard part for newcomers. When I remember myself the first year working with ROS, I literally wouldn’t know if the behavior is my bug or a ROS bug. And in case somebody convinced me it is a ROS bug, I wouldn’t know where to look or how to fix it. Maybe you could document your “journey” to your first PR, @skpro19, and turn it into a post here or a tutorial on ROS wiki?
I can confirm that a complete tutorial for picking and placing with a cheap arm and camera would be quite welcome.
I can give you one in Japanese…
I’m working on a ROS 2 version, and may possibly be convinced to do an English version if there isn’t anything out there already.
Bug fixing is hard for the reason you gave. But bugs are rare and you can’t depend on fixing them as a means of contributing. Even if you are a true expert you might have to wait around a while for a bug to show up. So better to write new stuff. And keep is SIMPLE
One project I want to do is port myNeato lidar controller. It runs on one of those $2 “blue pill” STM32 boards and uses ROS Serial. I have a custom PCB and 3D printer mounting. It would be good if the Micro-ROS node ran on the STM32 and maybe there could be a service to turn the lidar on and off These Lidars cost only $40 on eBay A self-contained USB interfaced ros2 compatible lidar for $50 might be popular.
Another project is an “double-ended Akerman” steering controller. Something that simple could also run on a microcontroller. It would be cool to place the entire base controller on ESP32. Then if there were a teleop controller on the ros2 network you could drive the base over WiFi and the base could have a web server that shows status.
I have an Intel Real Sense R300 camera that is no longer supported on new ROS systems. I happen to like these older R300 depth cameras as they are way-tiny and dirt cheap on eBay. Getting this to run on Foxy is way down from the top of my do-to list but needs going.
Here are dozens of small projects to do that are EASIER than ripping of the navigation stack and doing a re-write. THAT isbest left to experts but a simple lidar controller or camera driver is not really getting into the guts of ROS but still useful
Thanks @peci1. hacktoberfest looks interesting.
@Chris_Albertson makes sense.
As of writing this we have 84 issues labeled “bug” in the main moveit repo. A fix to any of these issues would be an awesome place to get started.
It sounds like you enjoy embedded projects, writing tutorials about using micro-ros on targets that don’t have tutorials already would probably be an excelent way to contribute while learning something cool you care about.