-
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 .
docs.ros.org/independent/api/rosinstall/html/rosws.html#set
$ 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¶ ↑
$ mkdir ~/catkin_ws ; cd ~/catkin_ws $ catkin_init_workspace $ catkin_make $ source devel/setup.bash
wiki.ros.org/catkin/conceptual_overview#Why_catkin.3F_Motivation_to_move_away_from_rosbuild
-
“In rosbuild, when we invoke the build system, we have to call custom scripts provided with rosbuild such as rosmake. rosmake is a Bash script that calls make which itself calls CMake which generates yet another makefile and finally invoking make again!
Catkin is much more elegant and is invoked by simply invoking CMake.
Catkin is implemented as custom CMake macros along with some Python code. As CMake and Python are portable, catkin is easily portable to any system that supports both Python and CMake.“
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