Debian Installation
Installation
(Tested on Stretch)
install_ros.sh
#!/usr/bin/env bash DISTRO=vivid ## the basic tools from ROS's Ubuntu Vivid Distribution ## also work with Debian Stretch ## http://wiki.ros.org/jade/Installation/Ubuntu#Installation.2BAC8-Ubuntu.2BAC8-Sources.Setup_your_sources.list sudo -E apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 sudo sh -c "echo \"deb http://packages.ros.org/ros/ubuntu $DISTRO main\" > /etc/apt/sources.list.d/ros-latest.list" sudo apt-get update sudo apt-get install cmake python-nose libgtest-dev ## needed to work on Beaglebone Black ## http://wiki.ros.org/jade/Installation/Source sudo apt-get install python-rosdep python-rosinstall-generator python-vcstool python-rosinstall build-essential sudo -E rosdep init rosdep update mkdir ~/ros_catkin_ws cd ~/ros_catkin_ws rosinstall_generator ros_comm --rosdistro jade --deps --wet-only --tar > jade-ros_comm-wet.rosinstall vcstool import src < jade-ros_comm-wet.rosinstall sudo apt-get install -y libboost-all-dev python-empy libconsole-bridge-dev libtinyxml-dev liblz4-dev libbz2-dev ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release sudo apt-get install python-netifaces
Workspace sample
To test your setup... the following script creates a workspace in ~/catkin_tmp and compiles and runs the example code from ROS/Tutorials/WritingPublisherSubscriber(c++)
create_workspace.sh
#!/usr/bin/env bash WORKSPACE_PATH=~/catkin_tmp ## Source . ~/ros_catkin_ws/install_isolated/setup.bash ## Create catkin workspace mkdir -p $WORKSPACE_PATH/src cd $WORKSPACE_PATH/src catkin_init_workspace cd $WORKSPACE_PATH/ catkin_make . $WORKSPACE_PATH/devel/setup.bash cd $WORKSPACE_PATH/src catkin_create_pkg beginner_tutorials std_msgs rospy roscpp cd $WORKSPACE_PATH/ catkin_make . $WORKSPACE_PATH/devel/setup.bash # escaping: # note in the HEREDOC below, \\ means \ in the output!! # \$ means $ in the output!! # \` means ` in the output!! cat <<EOF > $WORKSPACE_PATH/src/beginner_tutorials/CMakeLists.txt cmake_minimum_required(VERSION 2.8.3) project(beginner_tutorials) ## Find catkin and any catkin packages find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg) ## Declare ROS messages and services #add_message_files(FILES Num.msg) #add_service_files(FILES AddTwoInts.srv) ## Generate added messages and services generate_messages(DEPENDENCIES std_msgs) ## Declare a catkin package catkin_package() ## Build talker and listener include_directories(include \${catkin_INCLUDE_DIRS}) 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) EOF cat <<EOF > $WORKSPACE_PATH/src/beginner_tutorials/src/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(10); 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; } EOF cat <<EOF > $WORKSPACE_PATH/src/beginner_tutorials/src/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; } EOF cd $WORKSPACE_PATH catkin_make . $WORKSPACE_PATH/devel/setup.bash roscore & PID_roscore=$! sleep 2 ## wait for roscore to start echo echo " ####### " echo "Hit enter to run talker and listener nodes from 2 seconds" read rosrun beginner_tutorials talker & PID_talker=$! rosrun beginner_tutorials listener & PID_listener=$! sleep 2 ## run for a short while kill $PID_listener kill $PID_talker kill $PID_roscore