Currently, the Rock tooling is not able to start and configure ROS nodes by itself. You still have to use the ROS tooling to manage your ROS nodes.
This page assumes that you are able to start ROS nodes using roslaunch. What we will see is how to connect a live ROS system with Rock components, as well as with the rest of the Rock tooling (such as e.g. vizkit)
Connecting ROS nodes and Rock components
To be able to connect ROS nodes with Rock components, you can just use the typical startup Ruby scripts starting with
require 'orocos'
Orocos.initialize
For ROS integration to work, you will need to have setup the ROS_MASTER_URI environment variable properly (note: the rock.ros package setup sets it up to the default local master URI). Also make sure that roscore is started beforehand. Otherwise ROS integration will be disabled automatically:
Orocos[WARN]: ROS integration was enabled, but I cannot contact
the ROS master at http://localhost:11311, disabling
Once this is done, the ROS nodes can be resolved by the name service using their ROS name:
ros_node = Orocos.name_service.get '/prosilica_driver'
The topics to which this node are subscribed are listed as input ports and the ones it publishes at output ports:
ros_node.find_output_port('/prosilica/image_raw')
Alternatively, one can get a handle on a topic, and then publish or subscribe a component port to it:
ros_topic = Orocos::ROS.topic('/prosilica/image_raw')
ros_topic.connect_to task.an_input_port
task.an_output_port.connect_to ros_topic
This will fail if the topic does not already exist. To create a topic by publishing / subscribing a port, use #publish_on_ros and #subscribe_to_ros. Note that these two methods work in case the topics do exist as well. What the method above provides is protection against typos: it will fail if the topic does not already exist.
task.an_input_port.subscribe_to_ros('/topic/name')
task.an_output_port.publish_on_ros('/topic/name')
In both cases, a default topic name of task_name/port_name can be used by not specifying the topic name at all:
task.an_input_port.subscribe_to_ros
task.an_input_port.publish_on_ros