User Tools

Site Tools


getting_started:ros_example

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
getting_started:ros_example [2021/03/29 15:53] – created ursgrafgetting_started:ros_example [2024/12/10 08:17] (current) – [Working with ROS2] ursgraf
Line 1: Line 1:
-===== Example for Making your EEROS Application a ROS Node =====+====== Example for Making your EEROS Application a ROS Node ======
  
-The CMAKE file for the EEROS application using ROS has to be expanded as follows: +Back to [[getting_started:ros|]].
-<code> +
-cmake_minimum_required(VERSION 3.5.1) +
-project(testProject) +
-  +
-set(CMAKE_CXX_STANDARD 14) +
- +
-## ROS +
-message(STATUS "looking for package 'ROS'"+
-find_package( roslib REQUIRED ) +
-if (roslib_FOUND) +
- message( STATUS "-> ROS found"+
- add_definitions(-DROS_FOUND) +
- include_directories( "${roslib_INCLUDE_DIRS}"+
- message( STATUS "roslib_INCLUDE_DIRS: " ${roslib_INCLUDE_DIRS} ) +
- list(APPEND ROS_LIBRARIES "${roslib_LIBRARIES}"+
- find_package( rosconsole REQUIRED) +
- list(APPEND ROS_LIBRARIES "${rosconsole_LIBRARIES}"+
- find_package( roscpp REQUIRED ) +
- list(APPEND ROS_LIBRARIES "${roscpp_LIBRARIES}"+
-else() +
- message( STATUS "-> ROS NOT found"+
-endif() +
- +
-find_package(EEROS REQUIRED) +
-include_directories(${EEROS_INCLUDE_DIR};${EEROS_LIBUCL_INCLUDE_DIR}) +
-link_directories(${EEROS_LIB_DIR};${EEROS_LIBUCL_LINK_DIR}) +
-  +
-add_executable(testProject main.cpp) +
-target_link_libraries(testProject eeros ucl ${CMAKE_DL_LIBS} ${ROS_LIBRARIES}) +
-</code>+
  
 +===== Working with ROS1 =====
 Your test program might look like Your test program might look like
 <code cpp> <code cpp>
Line 42: Line 13:
   ...   ...
   eeros::control::rosTools::initNode("eerosNode"); // initialize the ROS node in your main function and give it a name.   eeros::control::rosTools::initNode("eerosNode"); // initialize the ROS node in your main function and give it a name.
-  ros::NodeHandle handle; // start the internal node 
   log.info() << "ROS node initialized.";   log.info() << "ROS node initialized.";
   signal(SIGINT, ...);   signal(SIGINT, ...);
Line 52: Line 22:
 The ROS node will properly shut down as soon as the last node handler is destroyed when going out of scope. The ROS node will properly shut down as soon as the last node handler is destroyed when going out of scope.
  
 +===== Working with ROS2 =====
 +
 +Your test program might look like
 +<code cpp>
 +#include <eeros/control/ros2/RosTools.hpp>
 +#include <signal.h>
 +  
 +int main(int argc, char **argv) {
 +  ...
 +  RosTools::initRos(argc, argv);
 +  auto node = RosTools::initNode("eerosNode");
 +  if (node != nullptr) log.info() << "ROS node initialized: " << node->get_name();
 +  ...
 +  ControlSystem cs(node, dt);
 +  ...
 +</code>
 +
 +When defining a control system which uses ROS subscriber or publisher blocks, you have to pass this node to them.
 +
 +All ROS tools such as ''rqt'' will list your EEROS application under the name ''eerosNode''. The variable ''node'' has to be passed to all blocks in the control system which publish or subscribe to ROS messages.\\
 +
 +If you want to register a signal handler, e.g. for shutting down a system (see [[getting_started:practical_problems:abort|]]), you have to register it after the ROS node is initialized.
 +The ROS node will properly shut down as soon as the last node handler is destroyed when going out of scope.
getting_started/ros_example.1617026021.txt.gz · Last modified: 2021/03/29 15:53 by ursgraf