第一个hello ros程序

ROS保姆级0基础入门教程⭐ |第一章 ROS的概述与环境搭建(4万字教程,建议收藏) ROS全称Robot Operating System(机器人操作系统) ROS是适用于机器人的开源元操作系统; ROS集成了大量的工具,库,协议,提供类似OS所提供的功能,简化对机器人的控制; 还提供了用于在多台计算机上获取,构建,编写和运行代码的工具和库,ROS在某些方面类似于“机器人框架”; ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。 阅读详情

1  设置环境变量

      在用户权限下输入以下命令

      

       每次启动一个新的shell,且要在这个shell中运行ROS时,只要运行上述source命令,ROS就能顺利工作。

      但是切换用户或者新建一个shell时,且要继续运行ros时,需要多次输入source命令,过于重复

      为了解决上述弊端,为每个用户的.bashrc文件添加上述指令

      .bashrc  这个文件主要保存个人的一些个性化设置,如命令别名、路径等。也即在同一个服务器上,只对某个用户的个性化设置相关。~/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。这个文件是用户目录下的隐藏文件,通过ls -a才能显示。使用vim命令打开.bashrc文件。在文件最后一行输入source命令。按esc退出插入模式,输入:wq退出vim。此时,任意打开一个shell,只要用户名是设置过的,如本例中的用户a,那么都可以直接执行ros相关命令

      

      

       

      

 


2 创建第一个小程序

2.1  创建工作区

        使用mkdir命令去创建一个目录,称之为工作区目录;

        创建工作区目录下的src文件夹,用于存放功能包的源代码

                  

2.2 创建功能包

       使用命令catkin_create_pkg创建一个在src下的功能包ling

    

       可见,在src目录下多了一个文件夹ling,同时,在ling文件夹中又多了2个配置文件;

       第一个配置文件,叫做package.xml,即清单文件;

       第二个文件,叫做CMakeLists.txt,是一个Cmake的脚本文件,Cmake是一个符合工业标准的跨平台编译系统。这个文件包含了一系列的编译指令,包括应该生成哪种可执行文件,需要哪些源文件,以及在哪里可以找到所需的头文件和链接库。当然,这个文件表明catkin在内部使用了Cmake。

  

2.3 编写hello.cpp文件

      在ling目录下,使用命令vim hello.cpp新建一个cpp文件,同时添加以下内容,退出保存(esc->:wq)

  

  ros::init函数初始化ROS客户端库。请在你程序的起始处调用一次该函数3。函数最后的参数是一个包含节点默认名的字符串。

  ros::NodeHandle(节点句柄)对象是你的程序用于和ROS系统交互的主要机制4。创建此对象会将你的程序注册为ROS节点管   理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象。

  ROS_INFO_STREAM宏将生成一条消息,且这一消息被发送到不同的位置,包括控制台窗口。

  此时可以发现文件夹ling下有3个文件

 

2.4 编译hello程序

2.4.1 声明依赖库

       首先,我们需要声明程序所依赖的其他功能包。对于c++程序而言,此步骤是必要的,以确保catkin能够向c++编译
器提供合适的标记来定位编译功能包所需的头文件和链接库。

    编辑包目录下的CMakeLists.txt文件。该文件的默认版本含有如下行:find_package(catkin REQUIRED)

    

     所依赖的其他catkin包可以添加到这一行的COMPONENTS关键字后面,如下所示:

                     find_package(catkin REQUIRED COMPONENTS package-names)

     对于hello例程,我们需要添加名为roscpp的依赖库,它提供了ROS 的C++客户端库。因此,修改后的find_package行如下所示:find_package(catkin REQUIRED COMPONENTS roscpp)

  

      我们同样需要在包的清单文件中列出依赖库,通过使用build_depend (编译依赖)和run_depend(运行依赖)两个关键字实现:
                                             <build_depend>package-name</build_depend>
                                             <run_depend>package-name</run_depend>

   打开package.xml文件后,找到文件偏下方的绿色字体<buildtool_depend>catkin</buildtoo;_depend>,在其后添加我们的依赖库

   

       在清单文件中声明的依赖库并没有在编译过程中用到;如果你在此处忽略它们,你可能不会看到任何错误消息,直到发布你的包给其他人,他们可能在没有安装所需包的情况下编译你发布的包而导致报错。

2.4.2 声明可执行文件

       在CMakeLists.txt中添加两行,来声明我们需要创建的可执行文件。其一般形式是:
                                         add_executable(executable-name source-files)
                                          target_link_libraries(executable-name ${catkin_LIBRARIES})

       第一行声明了我们想要的可执行文件的文件名,以及生成此可执行文件所需的源文件列表。如果你有多个源文件,把它们列在此处,并用空格将其区分开

        第二行告诉Cmake当链接此可执行文件时需要链接哪些库(在上面的find_package中定义)。如果你的包中包括多个可执行文件,为每一个可执行文件复制和修改上述两行代码。

      在我们的例程中,我们需要一个名为hello的可执行文件,它通过名为hello.cpp的源文件编译而来。所以我们需要添加如下几行代码到CMakeLists.txt中。注意:在CMakeLists.txt文件中有很多注释和例句,找到对应的例句,在其下方输入我们要求的命令,保存退出

   

2.4.3 编译工作区

   使用下列命令在工作区目录下编译包中所有的可执行文件 :catkin_make

  

   执行结果如下表示成功

  

  如果出现编译出错,找不到ros头文件,错误截图如下 

 

  此错误说明未正确包含头文件,即是CMakeLists.txt文件出错,2个原因

   第一个原因是依赖项未正确声明,以下是正确声明(find_package部分)

  

   第二个原因是未包含头文件路径,即在CMakeLists.txt文件中错误示例如下

  

 注意看绿色线段标明的一行,此行是包含头文件路径的命令行,此处是用#注释掉的,即没有包含,去掉前面的#号即可成功编译

2.4.4   执行脚本文件

        执行名为setup.bash的脚本文件,它是catkin_make在你工作区的devel子目录下生成的。source devel/setup.bash。这个自动生成的脚本文件设置了若干环境变量,从而使ROS能够找到你创建的功能包和新生成的可执行文件。。它类似于1.1节介绍的全局setup.bash,但是是专门为你的工作区量身定做的。除非目录结构发生变化,否则你只需要在每个终端执行此命令一次,即使你修改了代码并且用catkin_make执行了重编译。为了使rosrun命令可以随时找到你自己编写的包,可以仿照1.1节将source语句添加到用户的.bashrc

     

2.5 执行hello程序

      当所有这些编译步骤完成后,新的ROS程序就可以使用rosrun来执行,就像任何其他ROS程序一样。

      但是注意:任何ros程序在执行前都要保证roscore在运行

如果没有运行节点管理器roscore,那么就会报错,如下


3 补充内容

3.1  source filename 与 sh filename 及./filename执行脚本的区别

      当shell脚本在当前用户下具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有”.”是用来表示当前目录的。
      sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。
      source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

3.2 为配置为文件package.xml文件添加依赖项的时候注意事项

        catkin支持两种package.xml标签格式,格式1标准说明是REP-0127,格式2标准说明是REP-0140。

        格式1   <run_depend> (多个):运行时需要依赖的其它package,如动态链接库、可执行文件、Python模块、脚本文件等

                   <build_depend>:用于帮助使用本package的其它包传递依赖声明

        格式2 <exec_depend>:相当于格式1的run_depend标签。

                   <build_export_depend>:用于帮助使用本package的其它包传递依赖声明

      在不同的版本中要采用对应的版本命令,如果用混将报以下错误

        

        

        如果在package.xml文件的第二行有以下文字  format=“2”   则需要需要使用格式2,否则使用格式1

        


参考文献:

https://blog.youkuaiyun.com/bluewhalerobot/article/details/73658162  【 catkin_make的时候发生了什么】

https://blog.youkuaiyun.com/sukha/article/details/52460492【ROS源码分析--子话题-catkin】

https://blog.youkuaiyun.com/weixin_38500110/article/details/78448603【CMakeList.txt脚本文件及Cmake常用命令】

http://www.cnblogs.com/Jessica-jie/p/6706225.html【ROS两种workspace :overlay rosbuild_ws->catkin_ws->ROS库】

https://blog.youkuaiyun.com/violet_echo_0908/article/details/52056071【Linux下source命令详解】

 

ros入门 第一个小程序 最简单的hello程序+添加自定义头文件.hpp和源文件.cpp 1、创建工作区 工作区中要包含src文件夹 mkdir test #新建test文件夹作为工作区 cd test #进入工作区 mkdir src #工作区中新建src文件夹 2、创建功能包 cd src #进入src文件夹 catkin_create_pkg hello_ros #创建功能包,名字为hello_ros 此时src文件夹会生成两个文件CMakelist.txt package.... 阅读详情

相关推荐

第108篇 ROS2安装与第一个Hello World程序

面试的时候被问:"你ROS2环境搭过吗?"我说搭过。"装的时候遇到什么问题没?"我想了想,好像都是照着文档一步步来的,没啥印象。面试官说:"那说明你装得不够多。确实。ROS2的安装比ROS1复杂一些,尤其是选版本、选DDS实现、配置环境这些环节,每个都可能有坑。今天从安装开始,一直到你写出第一个能跑的ROS2程序,完整走一遍。

郑伟强dev的专栏 99

linux程序 移植 ros,编译第一个ROS程序 - Hello ROS

操作系统: Ubuntu 16.04ROS版本: Kinetic2.建立一个catkin_ws文件夹,以及子目录src:$ mkdir catkin_ws$ cd ./catkin_ws$ mkdir src3.在src目录下创建功能包,命名为first$ catkin_create_pkg first此时会产生first文件夹,其中包含两个文件,CMakelists.txt和package.xm...

weixin_39565910的博客 360

从仿真到实战:PMOS缓启动与栅极泄放电路的优化设计

本文深入探讨了PMOS缓启动与栅极泄放电路的优化设计,通过立创EDA仿真和实物调试,解决了关断速度慢和耐压问题。文章详细介绍了电路改进方案和低功耗优化技巧,为工程师提供了实用的工程实践建议,帮助提升电源开关电路的性能和可靠性。

weixin_28721917的博客 260

ROS编程入门教程(全过程示例代码)

ROS系统目前主流语言为C++/Python , Python需要安装vscode, 所以本文使用C++ .编译使用catkin (catkin和rosbuild都能用) 首先创建工作空间(working space) mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace 创建功能包pkg , catkin_create_pkg beginner_tutorials std_msgs rospy roscpp 创

lhb0709的专栏 1万+

FPGA领域四大顶级会议全景解读:从架构到应用的技术风向标

本文全景解读FPGA领域四大顶级会议(FPGA、FCCM、FPL、FPT),剖析其各自定位与技术风向。FPGA会议聚焦架构与工具创新,FCCM专攻硬件加速与定制计算,FPL覆盖从理论到应用的广泛领域,FPT则重点关注亚太市场与前沿应用。跟踪这些会议是把握FPGA技术演进、寻找创新灵感和应用方案的高效途径。

weixin_29274969的博客 335

从零到一:构建嵌入式Nginx的模块化架构与跨平台部署实战

本文详细介绍了在ARM32架构的RV1126嵌入式设备上,通过交叉编译技术构建模块化Nginx服务器的完整实战流程。涵盖环境配置、依赖库编译、Nginx核心与http_ssl_module等模块集成、性能优化及部署调试,为嵌入式开发提供高效可靠的Web服务器解决方案。

rock5的博客 202

ROS快速入门实现helloworld程序

ROS快速入门实现helloworld程序

IT菜鸟 1624

攀藤PMS系列传感器STM32驱动开发与数据解析实战

本文详细介绍了攀藤PMS系列传感器与STM32微控制器的驱动开发与数据解析实战,涵盖硬件连接、数据协议解析、驱动源码编写及数据处理优化。重点解析了传感器数据帧结构,提供了完整的STM32驱动实现代码,并分享了实际应用中的问题排查与性能优化经验,帮助开发者快速实现高精度颗粒物浓度检测。

milk8的博客 348

自制ROS移动小车——ROS编程基础知识(C++)

内容为文档与笔记

ArtoriaLili的博客 7131

xsens IMU配置

1.安装驱动 sudo apt-get update sudo apt-get install ros-kinetic-xsens-driver 2.配置IMU 设置输出四元数,加速度、角速度、地磁 cd /opt/ros/kinetic/lib/xsens_driver python mtdevice.py --configure "oq,aa,wr,mf" 3.启动IMU roslaunch xsens_driver xsens_driver.launch 转(https://www.cnblo

qq_41585680的博客 2325

【ELK】最新版ELK日志搜集,过滤与展示,手把手教你搭建企业级ELK日志平台

ELFK是一套完整的日志集中处理方案。 E:ElasticSearck ES 分布式索引型非关系数据库 存储logstash输出的日志 全文检索引擎,保存的格式是json格式 L:logstash 基于java语言开发的,数据收集引擎。日志的收集,可以对数据进行过滤,分析,汇总,以标准格式输出 K:Kiabana 是es的可视化工具。对es存储的数据进行可视化展示,分析和检索。 F: FileBeat是一个轻量级日志采集器,Filebeat属于Beats家族的6个成员之一。

景天科技苑 7万+

ros如何编译python文件_(二)ROS入门——4.如何编写ROS的第一个程序hello_world

ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS基础知识进行详细的讲解,给不熟悉ROS的朋友起到一个抛砖引玉的作用。本章节主要内容:1.ROS是什么2.ROS系统整体架构3.在ubuntu16.04中安装ROS kinetic4.如何编写ROS的第一个程...

weixin_39935903的博客 672

优化点列图(RMS半径)的操作数

优化点列图(RMS半径)的操作数

weixin_72050316的博客 2259

2、ROS的第一个程序:输出hello world

ROS输出hello world

ewt324w5的博客 380

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

本文将介绍如何使用VS2022克隆下载《植物大战僵尸C++自制版本》。Gitee项目地址:Gitee仓库地址Github项目地址:Github仓库地址游戏官网地址(下载可直接运行)游戏官网。

尔灵尔亿的博客 4943

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

编译第一个ROS程序--Hello ROS

操作系统: Ubuntu16.04ROS版本: Kinetic1.安装ROS,详情见http://blog.youkuaiyun.com/qq_17232031/article/details/795193082.建立一个catkin_ws文件夹,以及子目录src:$ mkdir catkin_ws $ cd ./catkin_ws $ mkdir src3.在src目录下创建功能包,命名为first$ ca...

TangCode的专栏 2075

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ROS入门第一个程序-Hello, World!

这里写自定义目录标题1、ROS安装2、创建工作区3. 编写代码4. 编译hello程序5. 编译工作区6.设置环境变量setup.bash7. 执行hello程序 1、ROS安装 (1)参考网站(点击此处)安装ros. (2)测试ros是否成功安装的方法:成功运行小乌龟程序,成功即可! Ctrl+Alt+T三次,打开三个终端,分别在三个终端命令行输入: roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key 其中

选好坑 挖好坑 才会结出好的果子 2222

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

第一个ros程序“hello ros“(C++版)

第一个roc程序(C+版)"hello ros"

qq_56589253的博客 273

ROS系列:三、如何编写ROS的第一个程序hello_world

4.如何编写ROS的第一个程序hello_world 既然ROS已经成功安装好了,大家一定很想亲自动动手编一个通过起手式例程hello_world,可以学到工作空间的创建、功能包的创建、功能包的源代码编写、功能包的编译配置、功能包的编译、功能包的启动运行等知识。ROS的小程序试试手,没错,这一节就隆重请出程序界的起手式例程hello_world。 通过起手式例程hello_world,可以学到工作空间的创建、功能包的创建、功能包的源代码编写、功能包的编译配置、功能包的编译、功能包的启动运行等知识。 (

努力努力努力 873

ROS入门笔记(九):编写ROS的第一个程序hello world(重点)

ROS入门笔记(九):编写ROS的第一个程序hello world(重点) 文章目录1 Catkin工作空间1.1 创建catkin工作空间1.2 编译工作空间1.3 设置环境变量1.4 检查环境变量2 创建功能包3 编写功能包的源代码4 功能包的编译配置4.1 在package.xml中添加功能包依赖4.2 在CMakeLists.txt添加编译选项4.2.1 声明依赖库4.2.2 声明可执行文件5 编译功能包5.1 方法一5.2 方法二6 启动功能包 1 Catkin工作空间 工作空间(worksp

即使是不成熟的尝试,也胜于从不执行的策略。 1867

编写ROS的第一个程序hello_world

编写ROS的第一个程序hello_world

m0_56451176的博客 914

ROS入门详细教程——动手实现你的第一个程序:Hello World!

⭐设备环境:VMware虚拟机、Ubuntu20.04⭐注意:本文中的代码部分地方是需要用户手动起一个新的文件名称的,在cv上去之前注意甄别(都有中文提示的),后面还有每一步的效果案例,仅供参考目录1、ROS安装1.1、安装操作1.2、测试ROS是否安装成功2、HelloWorld 的实现简介3、具体操作3.1、创建工作空间并初始化3.2、进入 src 创建 ros 包并添加依赖3.3、进入 ros 包添加 scripts 目录并编辑 python 文件3.5、为python文件添加可执行权限。

m0_74255303的博客 4422

ROS 编写第一个程序 hello world遇到的问题

创建的工作空间一定要在英文目录下,不然怎样改程序都不会运行 编译通过后报错: terminate called after throwing an instance of 'ros::InvalidNameException' what(): Character [ ] is not valid as the first character in Graph Resource Na...

weixin_30480583的博客 939

ROS尝试第一个小程序之hello world

先创建一个工作空间;再创建一个功能包;编辑源文件;编辑配置文件;编译并执行。

m0_69767208的博客 185

ROS Learning-017 Arduino-For-ROS-002 第一个程序: Hello World

Arduino For ROS-002 — 第一个程序: Hello World我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduino 1.6.11 Linux 32位 Arduino 板子的型号:Arduino UNO R3 使用 的ROS版本:ROS Indigo 如果你还没有搭建ROS与Arduino之间的连接关系的话, 请参考 这

AoboSir.com 1万+
下一篇: 第一个发布者程序
guosuling
博客等级 码龄9年 98粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值