Leírás¶
Önálló feladatként készítsünk egy my_launch_pkg
nevű package-t, amiben egy run_transforms_and_markers.launch.py
elindítja a:
- node-ot, ami a
map
,orbit1
ésorbit2
frame-ket publikálja (ros2 run arj_transforms_cpp pub_transforms
) - az
rqt_reconfigure
-t (ros2 run rqt_reconfigure rqt_reconfigure
) - a statikus
orbit3
frame-et (ros2 run tf2_ros static_transform_publisher --x 1.0 --y 0.2 --z 1.4 --qx 0.0 --qy 0.0 --qz 0.0 --qw 1.0 --frame-id orbit2 --child-frame-id orbit3
) - és az Rviz2-t indító launch-t is (
ros2 launch arj_transforms_cpp rviz1.launch.py
)
Ellenőrizzük rviz2-ben a helyes működést.
Tehát indítható legyen az önálló feladat végén a következő paranccsal:
ros2 launch my_launch_pkg run_transforms_and_markers.launch.py
Hozzuk létre a my_launch_pkg
package-t¶
Előkövetelmény, hogy a arj_transforms_cpp
package már buildelve és futtatható legyen.
Ha esetleg már létezne a my_launch_pkg
package akkor töröljük. (Gépteremben elképzelehető, hogy előző félévben valaki létrehozta.)
cd ~ && test -d "ros2_ws/src/my_launch_pkg" && echo Letezik || echo Nem letezik
rm -r ~/ros2_ws/src/my_launch_pkg
Nyissunk egy új terminált, és source-oljuk a telepítést (ha nincs bashrc
-ben), hogy a ros2
parancsok működjenek.
Navigáljunk az már létrehozott ros2_ws
könyvtárba.
Fontos, hogy a csomagokat az src
könyvtárban kell létrehozni, nem a munkaterület gyökerében. Tehát navigáljunk a ros2_ws/src
mappába, és futtassuk a package létrehozó parancsot:
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake my_launch_pkg
A terminál egy üzenetet küld vissza, amely megerősíti a my_launch_pkg
csomag és az összes szükséges fájl és mappa létrehozását.
Launch mappa¶
Hozzunk létre egy mappát a launch fájlok részére:
cd ~/ros2_ws/src/my_launch_pkg
mkdir launch
Launch fájl létrehozása¶
cd launch
code run_transforms_and_markers.launch.py
Állítsunk össze egy launch fájlt:
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.substitutions import FindPackageShare
def generate_launch_description():
return LaunchDescription([
# ros2 run arj_transforms_cpp pub_transforms
Node(
package='arj_transforms_cpp',
executable='pub_transforms',
),
# ros2 run rqt_reconfigure rqt_reconfigure
Node(
package='rqt_reconfigure',
executable='rqt_reconfigure',
),
# ros2 run tf2_ros static_transform_publisher --x 1.0 --y 0.2 --z 1.4 --qx 0.0 --qy 0.0 --qz 0.0 --qw 1.0 --frame-id orbit2 --child-frame-id orbit3
Node(
package='tf2_ros',
executable='static_transform_publisher',
arguments=['1.0', '0.2', '1.4','0', '0', '0', '1', 'orbit2','orbit3'],
),
# ros2 launch arj_transforms_cpp rviz1.launch.py
IncludeLaunchDescription(
PythonLaunchDescriptionSource([
FindPackageShare("arj_transforms_cpp"), '/launch/', 'rviz1.launch.py'])
),
])
ROS2
launch használata¶
A létrehozott launch fájl elindítása az alábbi módon történik:
cd ~/ros2_ws/src/my_launch_pkg/launch # belépünk a launch fájlt tartalmazó mappába
ros2 launch run_transforms_and_markers.launch.py
A fent bemutatott direkt módon kívül egy launch fájl futtatható csomag által is:
ros2 launch <csomag_megnevezése> <launch_fájl_neve>
Olyan csomagok esetében, amelyek launch fájlt tartalmaznak, érdemes létrehozni egy exec_depend
függőséget a ros2launch
csomagra vonatkozóan a csomag package.xml
fájljában:
<exec_depend>ros2launch</exec_depend>
Ezzel biztosítható, hogy az ros2 launch
parancs elérhető a csomag buildelése után.
Adjuk hozzá a package-hez, hogy bárhonnan indíthassuk¶
cd ~/ros2_ws/src/my_launch_pkg
code .
A package.xml-hez a <test_depend>
elé szúrjuk be következő sort:
<exec_depend>ros2launch</exec_depend>
A CMakeLists.txt-hez a ament_package()
elé szúrjuk be következő 2 sort:
install(DIRECTORY launch
DESTINATION share/${PROJECT_NAME})
Buildeljük a szokáso módon:
cd ~/ros2_ws
colcon build --packages-select my_launch_pkg
source ~/ros2_ws/install/setup.bash
Ez a parancs most már bárhonnan kiadható:
ros2 launch my_launch_pkg run_transforms_and_markers.launch.py
Források¶
- docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.html
- docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.html
- docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Py-Publisher-And-Subscriber.html