User Tools

Site Tools


getting_started:ros_example

Example for Making your EEROS Application a ROS Node

Back to Interfacing with ROS.

The CMAKE file for the EEROS application using ROS has to be expanded as follows:

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})

Your test program might look like

#include <eeros/control/ros/EerosRosTools.hpp>
#include <ros/ros.h>
#include <signal.h>
 
int main(int argc, char **argv) {
  ...
  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.";
  signal(SIGINT, ...);
  ...

All ROS tools such as rqt will list your EEROS application under the name eerosNode.

If you want to register a signal handler, e.g. for shutting down a system (see Shutting down a System Properly), 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.txt · Last modified: 2021/03/29 15:55 by ursgraf