-
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