u1 - Rosbuild

LSD-SLAM colour coded depth and 3-D mapper (github.com/tum-vision/lsd_slam)

$ mkdir ~/rosbuild_ws ; cd ~/rosbuild_ws
$ rosws init . /opt/ros/indigo
$ mkdir package_dir
$ rosws set ~/rosbuild_ws/package_dir -t .

$ echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
$ bash

$ cd package_dir ; git clone https://github.com/tum-vision/lsd_slam
$ rosmake lsd_slam

C++ Publisher/Subscriber (wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29)

$ roscd
$ cd package_dir
$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp

QtCreator-New Project-Import Project-Import Existing Project-Choose…Proj name:beginner_tutorialsROS

$ rospack profile
$ rospack find beginner_tutorials
$ roscd beginner_tutorials
$ rosed beginner_tutorials CMakeLists.txt

Add to default CMakeLists.txt

rosbuild_add_executable(talker src/talker.cpp)
rosbuild_add_executable(listener src/listener.cpp)

$ make

$ roscore
$ rosrun beginner_tutorials listener
$ rosrun beginner_tutorials talker

u2 - Catkin

wiki.ros.org/catkin/conceptual_overview#Why_catkin.3F_Motivation_to_move_away_from_rosbuild

$ mkdir ~/catkin_ws ; cd ~/catkin_ws
$ catkin_init_workspace
$ catkin_make
$ source devel/setup.bash

C++ Publisher/Subscriber (wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29)

$ cd ~/catkin_ws/src/beginner_tutorials ; mkdir src

$ catkin_create_pkg
  Created package.xml
  Created CMakeLists.txt

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  genmsg
)

# 17/6/16 DH: Adding from http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(C++)
add_message_files(FILES Num.msg)
add_service_files(FILES AddTwoInts.srv)

generate_messages(
  DEPENDENCIES
  std_msgs
)

catkin_package()

include_directories(
  ${catkin_INCLUDE_DIRS}
)

# 17/6/16 DH: Adding from http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(C++)
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

talker.cpp:

#include "ros/ros.h"
#include "std_msgs/String.h"

#include <sstream>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "talker");
  ros::NodeHandle n;
  ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
  ros::Rate loop_rate(1);

  int count = 0;
  while (ros::ok())
  {
    std_msgs::String msg;

    std::stringstream ss;
    ss << "hello world " << count;
    msg.data = ss.str();

    ROS_INFO("%s", msg.data.c_str());
    chatter_pub.publish(msg);

    ros::spinOnce();

    loop_rate.sleep();
    ++count;
  }

  return 0;
}

listener.cpp:

#include "ros/ros.h"
#include "std_msgs/String.h"

void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
  ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "listener");
  ros::NodeHandle n;
  ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
  ros::spin();
  return 0;
}

Add 'service' & 'message' files specified in 'CMakeLists.txt'

$ cd beginner_tutorials ; mkdir msg
$ echo "int64 num" > msg/Num.msg
$ mkdir srv
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

Then…

$ catkin_make

C++ Service/Client (wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29)

$ roscd beginner_tutorials
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
$ rossrv show beginner_tutorials/AddTwoInts

$ roscd;cd ..
$ catkin_make

$ roscore
$ rosrun beginner_tutorials add_two_ints_server
$ rosrun beginner_tutorials add_two_ints_client 1 3