ROS实现一个topic通信-初学入门

topic的正确入门姿态

就一句话,去官网学,最正规还免费[ROS官网教程].

先要创建一个ROS包

$cd ~  #回到home目录
$mkdir -p catkin_ws/src #递归创建ros工作目录和源文件目录
$cd catkin_ws #进入catkin_ws目录
$catkin_make #编译初始化ROS工作空间

ROS的一个包必须要包含:
1.package.xml文件;作用:制定依赖关系
2.CMakeLists.txt文件;作用:
3.每一个ROS包(package)都要有它自己的文件夹;
即一个ROS package的结构是这样的:

-workspace_folder/       #自己的文件夹-->符合要求3
     |
      ---CMakeLists.txt #  ->符合要求2
      ---package.xml  # ->符合要求 1
      ---...(other files)

使用指令catkin_create_pkg <package_name> [depend1] [depend2] [depend3]实现ROS package的创建.实例如下:

$cd src #进入源文件目录
$catkin_create_pkg beginner_tutorials std_msg roscpp #创建名为beginner_tutorials的ROS包,其依赖有depend1为 std_msg,depend2为roscpp
$cd ~/catkin_ws#进入ROS工作空间
$catkin_make #编译初始化
$.~/catkin_ws/devel/setup.bash#更新ROS工作空间

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

在ros package里实现topic

$roscd beginner_tutorials #使用roscd指令进入之前创建的ros包.
$mkdir src #创建源码文件
$cd src
$vim talker.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(10);
  	int count =0;
  	while(ros::ok())
  	{
  	  std_msgs::String msg;
  	  std::stringstream ss;
  	  ss << "hello world " << count;
  	  msg.data = ss.str();
  	  ROS.data = ss.str();
  	  ROS_INFO("%s",msg.data.c_str());
  	  chatter_pub.publish(msg);
  	  ros::spinOnce();
  	  loop_rate.sleep();
  	  ++count;
  	}
  	return 0;
  }
$vim listener.cpp

代码如下:

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

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;
}

依赖配置

接下来就是要修改配置文件package.xml和CMakeLists.txt了.目前,我对于这两个文件的基本功能有基本了解,但是其基本的语法我还是不够了解.现在先说一下当前实例该如何配置.

CMakeLists.txt

CMakeLists.txt是CMake用来构建软件包的输入文件.任何CMake编译包至少要包含一个CMakeLists.txt.该文件描述了如何构建代码以及将他们安装在那个地方.
CMakeLists.txt文件必须要遵守下面的格式才可以正确构建工程.

1.Require CMake Version(cmake_minimum_required)
2.Package Name(project())
3.Find other CMake/Catkin packages needed for build(find_package())
4.Enable Python module support(catkin_python_setup())
5.Message/Service/Action Generators(add_message_files(),add_service_files(),add_action_files())
6.Invoke message/service/action generation(generate_messages())
7.Specify package build info export(catkin_package())
8.Libraries/Executables to build(add_library()/add_executable()/target_link_libraries())
9.Tests to build(catkin_add_gtest())
10.Install rules(install())

Require CMake Version(cmake_minimum_required)

cmake_minimum_required(VERSION 2.8.3) #Catkin 要求的的版本为2.8.3或更高

Package Name(project())

project(robot_brain) #指明当前正在创建的软件包的包名,之后就可以在任何地方的CMakeLists.txt文件中通过${robot_brain}来调用该包.

Find other CMake/Catkin packages needed for build(find_package())

find_package(catkin REQUIRED) #制定其他CMake包需要被找到用于构建项目.
find_package(catkin REQUIRED COMPONENTS nodelet) #如果项目依赖某个包(what is "wet packages"??)的其中几个组件,例如本实例中就是依赖catkin的nodelet组件.

Enable Python module support(catkin_python_setup())

Message/Service/Action Generators(add_message_files(),add_service_files(),add_action_files())

Invoke message/service/action generation(generate_messages())

Specify package build info export(catkin_package())

catkin_package()是由catkin提供的宏,这需要为生成系统指定特定于catkin的信息,然后生成pkg_config和cmake文件。该宏有5个参数
1.INCLUDE_DIRS-为package导入include路径
2.LIBRARIES-项目中导入的的库
3.CATKIN_DEPENDS-本项目依赖的其他catkin项目
4.DEPENDS-
5.CFG_EXTRAS-额外的配置选项

catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp nodelet
DEPENDS eigen opencv
)

CMakeList阅读到这里http://wiki.ros.org/catkin/CMakeLists.txt

Libraries/Executables to build(add_library()/add_executable()/target_link_libraries())

Tests to build(catkin_add_gtest())

Install rules(install())

package.xml

launch文件启动工程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值