Tartalom
  1. Előkészületek
  2. 1. feladat
  3. 2. feladat
  4. Önálló feladat 1
  5. Önálló feladat 2
  6. Utolsó lépések

Előkészületek

Korábbi gyakorlaton megismerkedtünk a rosbag formátummal (ROS 2-ben a formátum már .mcap).

Előkészületként nézzük meg, hogy létezik-e a C:\temp könyvtár

test -d "/mnt/c/temp" && echo Letezik || echo Nem letezik

Vagy egyszerűbben:

ls /mnt/c/temp
  • Ha nem létezik (No such file or directory), akkor hozzuk létre: mkdir /mnt/c/temp
  • Ha létezik, akkor nincs teendőnk, lépjünk a következő lépésre, másoljuk át ide az .mcap fájlokat

Tanteremben a másolás a következő parancsok egyike legyen:

rsync -avzh --progress /mnt/kozos/measurement_files/lexus3sample01.mcap  /mnt/c/temp/
rsync -avzh --progress /mnt/kozos/measurement_files/lexus3sample02.mcap  /mnt/c/temp/
rsync -avzh --progress /mnt/kozos/measurement_files/lexus3sample03.mcap  /mnt/c/temp/
rsync -avzh --progress /mnt/kozos/measurement_files/lexus3sample04.mcap  /mnt/c/temp/

Otthon a következő linkről (zöld gomb), vagy parancsként wget-el lehet letölteni:

wget  -O lexus3sample02.mcap https://laesze-my.sharepoint.com/:u:/g/personal/herno_o365_sze_hu/EakTOhcjblNInqjRMfaGVmsB0diDv0SWpXw9rwo0MD7f3w?download=1

Rosbag letöltése 300 MB

1. feladat

A feladat egyszerű LIDAR szűrés, X, Y és Z koordináták szerint.

Ha még nem tettük volna, klónozzuk az arj_packages repot és buildeljük az arj_simple_perception package-t.

cd ~/ros2_ws/src
git clone https://github.com/sze-info/arj_packages

Ha már létezik, akkor az előző lépés helyett, csak frissítsük.

cd ~/ros2_ws/src/arj_packages/
git status
git checkout -- .
git pull

A git checkout -- . az összes esetleges lokális változás visszavonására jó.

cd ~/ros2_ws
MAKEFLAGS="-j4" colcon build --packages-select arj_simple_perception --cmake-args -DCMAKE_BUILD_TYPE=Release

A klasszikus colcon build --packages-select arj_simple_perception is működik, csupán egy kicsit lassabb, ezért használjuk most a build flageket.

source ~/ros2_ws/install/setup.bash
ros2 run arj_simple_perception lidar_filter_simple
ros2 bag play /mnt/c/temp/lexus3sample02.mcap --loop --clock --rate 0.5 --read-ahead-queue-size 2048

Nézzük meg, hogy a következő toicok léteznek-e?

  • /lexus3/os_center/points
  • /lidar_filter_output
ros2 topic list

Kérdezzük le a topicok típusát.

ros2 topic type /lidar_filter_output
ros2 topic type /lexus3/os_center/points

Mindkét esetben sensor_msgs/msg/PointCloud2 kell, hogy legyen.

Vizsgáljuk meg közelebbről a node-ot.

ros2 node info /lidar_filter_simple
Subscribers:
    /lexus3/os_center/points: sensor_msgs/msg/PointCloud2
    /parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
    /lidar_filter_output: sensor_msgs/msg/PointCloud2
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log

Új terminalban vizsgáljuk meg a gráfot:

ros2 run rqt_graph rqt_graph

Alt text

2. feladat

Nyissuk meg VS code-ban a package-t:

code ~/ros2_ws/src/arj_packages/arj_simple_perception

Hasnolítsuk össze a lidar_filter_simple_param.cpp-t a lidar_filter_simple.cpp-vel. Vs code jobb kilikk a fájlon Select for compare és Compare with Selected.

compare_vs_code01

Az előző feladatban használt egyszerű filter minimum és maximum X,Y,Z értékeit dinamikusan változtassuk.

source ~/ros2_ws/install/setup.bash
ros2 run arj_simple_perception lidar_filter_simple_param
source ~/ros2_ws/install/setup.bash
ros2 launch arj_simple_perception run_rviz1.launch.py

Állítsuk át a paramétereket:

ros2 run rqt_reconfigure rqt_reconfigure

A 3 terminal helyett használhatunk egy launch fájlt is:

source ~/ros2_ws/install/setup.bash
ros2 launch arj_simple_perception run_all.launch.py

Nagyjából így fog kinézni az rqt_reconfigure meg az rviz2:

Önálló feladat 1

Írjunk egy launch fájlt, nevezzük run_fliter_and_rviz.launch.py-nak, ami a filtert és az rviz configot indítja. Így lehessen indítani:

ros2 launch arj_simple_perception run_fliter_and_rviz.launch.py

Önálló feladat 2

Módosítsuk a lidar_filter_simple_param.cpp-t, úgy, hogy amennyiben a minimum érték nagyobb, mint a maximum, akkor is működjön. Ebben az esetben kezelje a minimum értéket maximumként és fordítva.

Írjon ki egy warning üzenetet.

if ...
RCLCPP_WARN_STREAM(this->get_logger(), "Minimum is bigger than maximum, inverse usage.");

Utolsó lépések

A tanteremben állítsuk vissza az eredeti állapotot. (Otthon commitolhatjuk saját repo-ba, ha szeretnénk.)

cd ~/ros2_ws/src/arj_packages/
git status

A git checkout -- .: Minden nem staged (unstaged) változás elvetése lokálisan. VS code-ban kb ez a “discard all changes” parancs lenne.

git checkout -- .

Nézzük újra a státuszt:

git status
git pull