Challenge Kick-Off

The challenge aims at making learners develop a first robotic project. In the end, both the execution of the proposed solution and the source code with documentation will be evaluated.

The main objectives of the project consist of:

  • Control a robot in a cluttered environment
  • Map a static environment
  • Detect all the Nuka-Cola bottles
  • Estimate the position of all the Nuka-Cola in the map
  • Optimize the exploration strategy

Challenges are proposed to increase sequentially the complexity of the expected solution, but first the students have to structure their developping environment...

Create a group

As a first move, you have to constitute a group of \(3\) developers. Record the created group on a shared document: groups' doc.

  • Create a new section for your group
  • Record the name of the machine and the pibot you use and the names of each member of the group.
  • The number of the pibot matches the number identifying a group and it must be used as ROS_DOMAIN_ID.
  • Attributs a role to each of the group members:
    • Navigation - Responcible for the good robot navigation.
    • Localization - Responcible for the good localization of objects to detect.
    • Integration - Responcible for the good integration of the overall architecture.

Generate a working environment

We ask each group to use git and share their work with professors through github (because it is the reference) (or gitlab at the student request, because it is open).

Git is a versioning program working in a distributed way. "Git is software for tracking changes in any set of files, usually used for coordinating work among programmers collaboratively developing source code during software development." Wikipedia-2021-12-6.

Potentially the developers can share some of the versions there developed (or all) by installing an extra git on a shared server. github is certainly the most famous web git-solution (but you can install for instance a web application as gitlab on your own server for instance). Notice that gitlab is both an open solution you can deploy on your own server and a web-service (gitlab.com) you can use. For this lecture, you will use github or gitlab.com, no other solution would be accepted.

  • (Each of the developers) Create a github account.
  • (One of the developers) Create a new repository on github and invite the teammates. Choose a name referring the group (for instance uvlarm-machinename), the idea is to propose a repository name clear but different from a group to another.
  • (Each of the developers) Clone locally.

In developpers terminals:

cd your-ros-workspace
git clone https://my.github.url/uvlarm-machinename.git
  • (One of the developers) Invite the professor (or set the repository public) - github group: imt-mobisyst
  • (One of the developers) Reccord the url in the shared document: (2023-2024 groups).

You can then, work with visual studio code. By opening a the project uvlarm-machinename, VSCode will recognise the git repository (i.e. the presence of hiden .git directory). VSCode is also capable of managing a secure connection between your machine and github.

code uvlarm-machinename

Optionaly, you can configure ssh access: https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh

Initialize:

Your repository has to match a meta ROS-package (i.e. a directory composed by other directories each of them matching a ros-package). The repository would be cloned aside of the larm packages (pkg-tbot). So clone your repository in the your-ros-workspace directory and then create as many packages you want inside.

cd ~/your-ros-workspace
git clone github/uvlarm-machinename.git

(One of the developers) Initialize a README.md file in Mardown at least with a simple tittle and refering the developers (cf. Markdown syntax):

echo "# grp-`machinename` repository for the UV-LARM" > README.md
git add README.md

It is possible then to push on the server your first commit. One commit refer to one version of your project, you can (must) generate has versions has you want. A commit do not have to serve a functional version of your works. It could be transitive commit. And most importantly git is capable to re-generate any of your commits, so do not hesitate to commit continuously...

git commit -am "Initialize README file"
git pull
git push

All the other developers can now pull the new version (typically, in the IMT computers)....

New package:

Then you can go inside your repository and create a new ros package:

cd larm-machinename
ros2 pkg create ... # cf. package tutorial

A new directory my_amasing_pkg appears:

The git status command informs you that this package is not followed by git. Let correct that.

git add my_amasing_pkg
git commit -am "Initializing my_amasing_pkg"

Strange, nothing changes on my github repo. The git repo on github is a different entity than the one on your computer. You have to manually synchronize then when you want to share your work with the command pull and push. Try-it.

Now you can commit, pull, push as often as possible (and add if you have some new files...).