就一句话,去官网学,最正规还免费[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
实现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的基本语法知识。
$roscd beginner_tutorials #使用roscd指令进入之前创建的ros包.
$mkdir src #创建源码文件
$cd src
$vim talker.cpp
代码如下:
///@talker.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"
#include
int main(int argc, char **argv)
{
ros::init(argc,argv,"talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise("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是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())
cmake_minimum_required(VERSION 2.8.3) #Catkin 要求的的版本为2.8.3或更高
project(robot_brain) #指明当前正在创建的软件包的包名,之后就可以在任何地方的CMakeLists.txt文件中通过${robot_brain}来调用该包.
find_package(catkin REQUIRED) #制定其他CMake包需要被找到用于构建项目.
find_package(catkin REQUIRED COMPONENTS nodelet) #如果项目依赖某个包(what is "wet packages"??)的其中几个组件,例如本实例中就是依赖catkin的nodelet组件.
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