ROS Hello World

news2024/11/15 23:24:41

万物始于Hello World,为了体验ROS,使用Hello World介绍ROS的简单使用。

一、Hello World工程简介

首先需要创建工程,流程为:

  1. 创建工作空间目录(即工程根目录,注意此时还不是ROS工作空间,只是一个目录)
  2. 初始化工作空间(即把当前目录初始化为一个ROS工作空间)
  3. 创建功能包(ROS基本单元,可以理解为一个功能模块,每个工程至少有一个功能包)
  4. 编辑源文件(写代码实现需求)
  5. 编辑编译配置文件(ROS1使用CMake编译系统,这里编辑CMakeList.txt文件)
  6. 编译工程(使用CMake编译ROS工程,生成可执行文件,即ros节点,下文均称作节点)

不只是Hello World,所有ROS工程都是这样的流程。

另外,目前ROS开发主要使用C++和Python语言,这里会分别实现。

1.2 ROS Hello World C++ 版

注:其中ros_learning是工作空间的自定义名称。

1.2.1 创建工作空间目录

# 递归创建工作空间目录
mkdir -p ros_learning/src

1.2.2 初始化工作空间

这一步有两种方法都可以达到初始化工作空间的目的:

方法一:

# 1.进入src目录
cd ros_learning/src
# 2.初始化工作空间
catkin_init_workspace

方法二:

# 1.进入ros_learning目录
cd ros_learning/src
# 2.编译工作空间
catkin_make

1.2.3 创建功能包

cd ros_learning/src
catkin_create_pkg hello_world std_msgs rospy roscpp

其中,hello_world:自定义功能包名称,

std_msgs rospy roscpp:功能包依赖,roscpp是C++实现的库,而rospy是python实现的库,std_msgs是ROS标准消息库

1.2.4 编辑源文件

ros_learning/src/hello_world/src目录下新增hello_world.cpp文件,文件内容如下:

#include "ros/ros.h"

int main(int argc, char **argv)
{
    // 初始化ros节点,"hello_world_cpp"为自定义节点名称
    ros::init(argc, argv, "hello_world_cpp");

    // 在控制台打印 hello world
    ROS_INFO("Hello World!");

    return 0;
}

1.2.5 编辑编译配置文件CMakeList.txt

由于新增了源文件hello_world.cpp,所以要配置该文件的编译规则。

找到ros_learning/src/hello_world/CMakeLists.txt中的Build,如下:

在这里插入图片描述

修改其中的add_executabletarget_link_libraries两项,如下:

在这里插入图片描述

修改说明如下:

add_executable(${PROJECT_NAME}_node src/hello_world.cpp)
# 生成可执行文件,其中 ${PROJECT_NAME}_node 代表节点的名称(也可以自定义,比如hello_world)
# src/hello_world.cpp 是源文件,也可以有多个。

target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
)
# 链接库文件,因为我们使用了ros的 ros::init 和 ROS_INFO,所以需要链接相应的库才可以编译成功。
# ${PROJECT_NAME}_node 代表要执行链接库的节点名称
# ${catkin_LIBRARIES} 搜索库的路径

1.2.6 编译工程

进入到ros_learning目录,编译该工程

cd ros_learning
catkin_make

编译成功后,会在ros_learning目录下生成build 和devel。

1.2.7 运行节点

生成的节点在 devel/lib/hello_world 中,我们可以直接执行:

在这里插入图片描述

不过这样需要知道节点的具体路径,实际中操作较麻烦。

ROS提供了 rosrun 命令,可以根据包名和节点名,在任何目录执行。

但需要具备以下两个条件:

  • 启动 roscore
  • 进入到工作空间目录中,执行 source ./devel/setup.bash(为了让系统找到节点)

在这里插入图片描述

source ./devel/setup.bash 只对当前终端有效,新打开终端仍需再执行该命令,为了避免每次执行,可以把该命令加到当前用户的 .bashrc 文件中,该文件在用户的 home 目录下。

方法一:直接打开 ~/.bashrc 文件,在末尾添加 source 你的工作空间目录/devel/setup.bash ,保存。

方法二:使用命令 echo "source 你的工作空间目录/devel/setup.bash" >> ~/.bashrc

最后,使用命令 source ~/.bashrc 使修改生效。

1.3 ROS Hello World Python 版

1到3步骤上面已经做过,这里直接编辑源文件。

1.3.1 编辑源文件

进入到 ros_learning/src/hello_world 目录,新建 scripts 目录,在该目录中新增 hello_world.py,内容如下:

#! /usr/bin python

import rospy

if __name__ == "__main__":
    # 初始化ros节点,"hello_world_py"为自定义节点名称
    rospy.init_node("hello_world_py")

    # 在控制台打印 Hello World!
    rospy.loginfo("Hello World!")

1.3.2 编辑编译配置文件CMakeList.txt

找到ros_learning/src/hello_world/CMakeLists.txt中的Install,修改catkin_install_python如下:

在这里插入图片描述

修改说明:

catkin_install_python(PROGRAMS
  scripts/hello_world.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
# 将脚本scripts/hello_world.py安装到指定位置
# PROGRAMS 关键字指定脚本程序
# DESTINATION 关键字指定安装位置
# ${CATKIN_PACKAGE_BIN_DESTINATION} 系统环境变量,存储当前功能包可执行文件安装路径

1.3.3 编译工程

进入到ros_learning目录,编译该工程

cd ros_learning
catkin_make

编译成功后,会在ros_learning目录下生成build 和devel。

1.3.4 运行节点

生成的脚本在 devel/lib/hello_world 中,同样可以直接运行,也可以使用 rosrun命令。

这里注意,无论直接运行还是使用rosrun命令,都需要先启动roscore

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

>LINK : fatal error LNK1561和LINK : fatal error LNK1168:解决方法

>LINK : fatal error LNK1561和LINK : fatal error LNK1168:解决方法 >LINK : fatal error LNK1561和LINK : fatal error LNK1168:解决方法_fatal link error-CSDN博客 如果无法解决:只能试试在之前的项目中能否运行 这个错误提示表明在编译连接时&#xff…

PubScholar-可检索1.7亿篇科技文献的公益平台来了!

可检索1.7亿篇科技文献的 公益平台来了! 11月1日 由中国科学院等单位联合建设的 PubScholar公益学术平台 正式对社会公众开放 网址:https://pubscholar.cn/ “公益学术平台”旨在为我国科技界和全社会提供高质量的公益性学术资源,提供学…

安全第一!速卖通测评补单稳定的系统注意事项大盘点

对新卖家而言,测评并非可耻之事,反而是无法起步、耗费自身时间才是真正的可耻。由于速卖通新店几乎无法获得任何活动的支持,流量也基本没有,因此要在90天内达成60单的业绩对于许多卖家来说都是一项挑战。因此,通过快速…

算法训练 第五周

一、多数元素 本题给了我们一个数组,要求我们找出这个数组中出现次数大于这个数组元素总量一半的那个元素,也可以理解为找出数组中出现次数最多的那个元素,本题的解决方法有很多,在此我们主要讨论三种解决思路。 1.Hash表 我们可…

Linux驱动——并发与竞态

并发 并发指多个执行单元同时、并行被执行,而并发执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问很容易导致竞态。 如下列AB写,C读,AB在写的过程中,C读的话就会出错。 对称多处理器…

Lightdb23.4 Client 包含ecpg可执行程序及相关库文件

功能介绍 部分客户在使用Lightdb client绿色包时需要ecpg程序和ecpg相关的头文件和库文件,所以在Lightdb 23.4版本client绿色包中新增了ecpg的程序和相关头文件和库文件,以方便用户的使用。 Client包目录结构 bin目录是可执行程序和脚本,i…

windows wsl使用,安装ubuntu

windows wsl使用 环境配置windows 家庭版 打开 hyper11 安装ubuntuwsl 命令 环境配置 搜索 启动和关闭 Windows功能 打开下面组件 windows 家庭版 打开 hyper11 解决Windows11 Home 没有 Hyber-v 创建 hyber-v.cmd 并管理员身份执行 pushd "%~dp0" dir /b %Sy…

使用QEMU启动uboot引导linux内核

上篇文章中实现了使用qemu启动uboot,本文实现使用qemu启动uboot引导内核的过程。 一、环境准备 主机系统:WSL-ubuntu20.04 uboot版本:u-boot-2023.10 Kernel版本:linux-5.4.18 二、制作sd卡 qemu支持模拟sd卡,可以…

Linux C语言进阶-D11多级指针、void指针及const

多级指针 多级指针变量:指向指针变量的指针变量 在下图中,定义一个a数组,再定义一个指针数组p[2],其中p数组中存储的是地址,再定义一个二级指针q指向p[0],即&p[0],又由于&p[0]就是p&am…

SpringCloud(七) Feign远程调用

目录 一, RestTemplate远程调用存在的问题 二, Feign的远程调用 2.1 什么是Fegin 2.2 Feign的使用(代替RestTemplate) 1. 引入依赖 2. 添加注解 3. 编写Feign的客户端 4. 测试 5. 总结 2.3 自定义配置 1. 配置文件方式 2. Java代码方式 三, Feign使用优化 3.…

keepalived与nginx与MySQL

keepalived VRRP介绍 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。 集群组成后,可…

Jellyfin转码和色调映射效率提升:开启处理器低电压模式(GuC/HuC)

Jellyfin转码和色调映射效率提升 系统环境拉取nyanmisaka/jellyfin镜像开启低电压模式Jellyfin配置开启QSV和低电压模式解码开启色调映射(基于OpenCL) 实测验证低电压模式转码帧率实测测试视频概况221029版本 vs 230901版本开启色调映射的影响开启低电压…

AI智能分析网关高空抛物算法如何实时检测高楼外立面剥落?

高楼外立面剥落是一种十分危险的行为,会造成严重的人身伤害和财产损失。TSINGSEE青犀智能分析网关利用高楼外立面剥落的信息,结合高空抛物算法来进行处理就可很好解决此问题。 1. 数据收集 首先,需要收集关于高楼外立面剥落的数据。这可以通…

Restful风格与Wesocket之间的关联

RESTful 风格和 WebSocket 本质上是两种不同的通信机制,它们在设计理念和用途上有明显的区别。 RESTful 是一种基于 HTTP 协议的架构风格,它使用标准的 HTTP 方法(如 GET、POST、PUT、DELETE 等)来进行资源的操作,并倾…

计算机毕业设计选题推荐-招聘信息推荐系统-Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

浅谈煤矿井下6kV动力电缆绝缘线监测系统的设计与应用

贾丽丽 安科瑞电气股份有限公司上海嘉定 201801 摘要:针对供电系统绝缘问题检测技术限制煤炭产量效率的问题,以某煤炭企业6kV井下供电系统为研究对象,开展了在线监测系统设计与应用工作。结果表明,系统工作稳定,满足井…

为什么开设项目管理专栏

首先,向各位同道同行,分享一个来自博主的好消息: 2023年8月,经过一次为期3个月的紧张、有序、活泼、生动的学习之旅,博主顺利通过了PMP认证,并且拿下3A。 其次,为记录本次学习过程的点滴和心得…

【云栖大会】我与“云栖”共成长

目录 一:何为云栖 二:初识云栖 三:被云栖圈粉 四:感受与体会 五:期待与建议 一:何为云栖 我们都说“万物皆可云”,这充分说明了云计算的重要性,而阿里云是云计算行业的领头羊之一…

计算机由于找不到msvcr120.dll无法执行代码的解决方法分享(亲测有效)

在使用软件过程中,我们可能会遇到一些错误提示,其中之一就是“找不到msvcr120.dll无法继续执行代码”。这个问题通常是由于缺少Microsoft Visual C Redistributable Packages for Visual Studio 2013(简称MSVCRT)导致的。MSVCRT是…

5.1 创建和销毁线程

方法 pthread_create(thread, attr, start_routine, arg)pthread_exit(status)pthread_cancel(thread)pthread_attr_init(attr)pthread_attr_destroy(attr) 创建线程 最开始main()程序只有一个默认的线程,其他的线程需要由编程人员显式创建。pthread_create()可以…