-
wiki.ros.org/cv_bridge/Tutorials
$ dpkg -L ros-indigo-vision-opencv
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