ROS Robot Operating System Sistemi RealTime Prof. Davide Brugali Università degli Studi di Bergamo Sviluppo di un sistema composto da tre nodi velocity_keyboard Implementato da noi VelocityCmd velocity_controller Implementato da noi Twist turtlesim 2 ROS Tutorial Fornito con ROS Workspace di sviluppo per ROS mobile_robot / src / CMakeLists.txt build / devel / Workspace -- WORKSPACE -- SOURCE SPACE (contains the packages) -- The 'toplevel' CMake file -- BUILD SPACE CATKIN_IGNORE -- DEVELOPMENT SPACE CMakeList.txt / ROS-Tutorial /mobile_robot/ http://wiki.ros.org/catkin/Tutorials/create_a_workspace 3 ROS Tutorial Workspace $ mkdir ~ / ROS-Tutorial / mobile_robot / src $ cd ~ / ROS-Tutorial / mobile_robot / src $ catkin_init_workspace $ cd ~ / ROS-Tutorial / mobile_robot $ catkin_make $ source devel / setup.bash 4 ROS Tutorial ROS Packages Software in ROS is organized in packages. A package might contain ROS nodes, a ROS-independent library, a dataset, configuration files, a third-party piece of software, or anything else that logically constitutes a useful module. The goal of these packages it to provide this useful functionality in an easy-to-consume manner so that software can be easily reused. This means that a package is the smallest individual thing you can build in ROS and it is the way software is bundled for release (meaning, for example, there is one debian package for each ROS package), respectively. http://wiki.ros.org/Packages 5 ROS Tutorial Workspace di sviluppo per ROS packages velocity_keyboard velocity_controller Node velocity_keyboard_node.cpp Class VelocityKeyboard.cpp velocity_controller_node.cpp VelocityController.cpp CMakeList.txt package.xml Workspace CMakeList.txt package.xml CMakeList.txt / ROS-Tutorial /mobile_robot/ http://wiki.ros.org/catkin/Tutorials/create_a_workspace 6 ROS Tutorial turtlesim Package velocity_keyboard $ cd ~/ROS-Tutorial/mobile_robot/src $ catkin_create_pkg velocity_keyboard std_msgs rospy roscpp $ source ~/ROS-Tutorial/mobile_robot/devel/setup.bash mobile_robot / src / CMakeLists.txt velocity_keyboard/ CMakeLists.txt package.xml 7 -- package ROS Tutorial ROS Nodes A node is a process that performs computation. Nodes are combined together into a graph and communicate with one another using streaming topics, RPC services, and the Parameter Server. These nodes are meant to operate at a fine-grained scale; a robot control system will usually comprise many nodes. For example, one node controls a laser range-finder, one Node controls the robot's wheel motors, one node performs localization, one node performs path planning, one node provide a graphical view of the system, and so on. 8 ROS Tutorial ROS Nodes All running nodes have a graph resource name that uniquely identifies them to the rest of the system. For example, /hokuyo_node could be the name of a Hokuyo driver broadcasting laser scans. Nodes also have a node type, that simplifies the process of referring to a node executable on the fileystem. These node types are package resource name with the name of the node's package and the name of the node executable file. In order to resolve a node type, ROS searches for all executables in the package with the specified name and chooses the first that it finds. As such, you need to be careful and not produce different executables with the same name in the same package . 9 ROS Tutorial Nodo tutorial_rover_driver velocity_keyboard_node VelocityKeyboard N.B. comando per spostarsi direttamente nella cartella base di un package $ roscd velocity_keyboard/ $ gedit include/VelocityKeyboard.hpp $ gedit src/VelocityKeyboard.cpp 10 ROS Tutorial main program class VelocityKeyboard.hpp 11 12 Velocity_keyboard_node.hpp 13 Velocity_keyboard_node.cpp 14 Topic “cmd_vel” velocity_keyboard include VelocityKeyboard.hpp velocity_keyboard_node.hpp msg VelocityCmd.msg src VelocityKeyboard.cpp velocity_keyboard_node.cpp CMakeList.txt package.xml 15 int8 command VelocityController.hpp 16 VelocityController.cpp 17 velocity_controller_node.hpp 18 velocity_controller_node.cpp 19 velocity_controller_node.cpp 20 CMakeLists.txt ## Declare a cpp executable add_executable(velocity_keyboard_node src/VelocityKeyboard.cpp src/velocity_keyboard_node.cpp) 21 ROS Tutorial nome del file eseguibile Compilare il codice sorgente in ROS Aprire un terminale selezionando l’icona Digitare i seguenti comandi: $ cd ~/ROS-Tutorial/mobile_robot/src $ source ~/ROS-Tutorial/mobile_robot/devel/setup.bash $ catkin_make Se serve, modificare il codice sorgente in Eclipse Ricompilare i progetti con il comando catkin_make 22 ROS Tutorial Creare il progetto Eclipse per un package $ catkin_make --force-cmake -G"Eclipse CDT4 – Unix Makefiles" $ cd ~/ROS-Tutorial/mobile_robot/build $ cmake ../src -DCMAKE_BUILD_TYPE=Debug $ cd ~/ROS-Tutorial/mobile_robot/ $ mkdir eclipse // Eclipse workspace folder $ source ROS-Tutorial/mobile_robot/devel/setup.bash $ eclipse // avvia Eclipse da terminal In Eclipse : File / Import / General /Existing Project Selezionare la cartella ROS-Tutorial/mobile_robot/build Selezionare il progetto elencato 23 ROS Tutorial ROS Messages velocity_controller Twist turtlesim geometry_msgs / Twist.msg nav_msgs / Odometry.msg 24 ROS Tutorial POSE 25 ROS Tutorial TWIST 26 ROS Tutorial Odometry 27 ROS Tutorial Sviluppo di un sistema composto da tre nodi Keyboard Target position_controller Odometry Twist turtlesim 28 ROS Tutorial