ROS-3:Hello world的实现

这篇博客介绍了如何在ROS环境中实现一个简单的`Hello World`程序。从创建工作空间、建立功能包到编写源代码和配置文件,再到编译和执行,详细阐述了每个步骤。ROS程序通过`ros::init`初始化,`ros::NodeHandle`处理节点交互,并使用`ROS_INFO`输出信息。最终,通过`catkin_make`编译并使用`rosrun`命令运行程序。
摘要由CSDN通过智能技术生成

hello world的实现

ROS中的程序的实现流程大致如下:

  1. 先创建一个工作空间;
  2. 创建一个功能包;
  3. 编辑源文件;
  4. 编辑配置文件;
  5. 编译并执行。

创建工作空间并初始化

mkdir -p test/src           //创建test工作空间
//cd test
catkin_make

上述命令中,首先会创建一个工作空间test以及一个src子目录,然后再进入工作空间调用catkin_make命令编译。

创建ROS功能包并添加依赖

cd src
catkin_create_pkg hello roscpp rospy std_msgs

上述命令会在工作空空间下生成一个功能包,该功能包依赖于roscpp、rospy、std_msgs。

进入ros包的src目录编辑源文件

cd hello_ros

创建源码文件hello.cpp

cd hello_ros
touch hell.cpp
sudo gedit hello.cpp

改写hello.c
C++源码实现

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    //执行 ros 节点初始化
    ros::init(argc,argv,"hello");
    //创建 ros 节点句柄(非必须)
    ros::NodeHandle n;
    //控制台输出 hello world
    ROS_INFO("hello world!");

    return 0;
}

其中:
ros::init函数:初始化ROS客户端库。需要在程序起始处调用一次该函数,函数的最后一个参数是一个包含节点默认名的字符串。
ros::NodeHandle对象:是你的程序用于和ROS系统交互的主要机制,创建此对象将会把你的程序注册为节点管理器的节点。
ROS_INFO_STREAM宏: 将生成一条消息,且这条消息被发送的不同的位置,包括控制台。

编译hello程序

声明依赖库

sudo gedit CMakeLists.txt
//然后将以下内容复制到cmake文档中去

cmake_minimum_required(VERSION 2.8.3)
##cmake 的版本
project(hello_ros)
##工程的名称
find_package(catkin REQUIRED COMPONENTS  roscpp)
##选择ros的包进行编译
include_directories( include ${catkin_INCLUDE_DIRS})
##对头文件进行添加
add_executable(hello hello.cpp)
##声明了我们想要的可执行文件的文件名,以及所需的源列表,如果需要多个源列表,使用空格将其分开
target_link_libraries(hello ${catkin_LIBRARIES})
##告诉CMake当连接此可执行文件时候需要链接哪些库。如果你的包里有多个可执行文件,为每个可执行文件复制和修改上述两行

编译工作区

一旦CMakeLists.txt文件设置好了,就可以编译工作区,在工作区根目录下使用一下指令:

cd test
catkin_make

执行

先执行命令行:

roscore

再执行

cd test
source ./devel/setup.bash
rosrun hello_ros hello
##rosrun 包名 C++节点名

ROS的文件系统级别

与其他操作系统类似,一个ROS程序的不同组件要放在不同的文件夹中,这些文件夹是根据功能不同来对文件进行组织的。
.功能包(Package):功能包构成了ROS中的原子级别。一个功能包具有用于创建ROS程序的最小结构和最小内容。它可以包含ROS运行时进程(节点)、配置文件等。
功能包下的功能包清单:功能包清单是提供关于功能包、许可证、依赖关系、编译标志等信息,清单由一个名为package.xml的文件管理。
元功能包,是几个具有某些功能的包组织在一起,那么你会使用一个元功能包。为了保持ROS简洁,功能包集被移除,在ROS中,存在大量用途的元功能包。
元功能包清单(package.xml)类似普通功能包但是有一个xml个是的导出标志,在结构上有一定的限制。
消息类型:消息是一个进程发送到其他进程的消息,ROS中有很多标准类型的消息。消息类型的说明存储在my_package/srv/MyMessageType.srv中
服务类型:服务类型的说明存储在my_package/srv/MyServiceType.srv中,为ROS中由每个进程提供的服务请求个和响应数据结构

工作空间

工作空间是一个文件夹,其中包含功能包,功能包有包含源文件和环境和或工作空间,从而提供编译这些功能包的一种方式。当你想要同时编译不同的功能包时,它非常有用,并且是集中化所有开发的一种好方式。

参考链接: ROS Hello World

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值