ROS Hello World

万物始于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 worldROS_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 pythonimport rospyif __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(PROGRAMSscripts/hello_world.pyDESTINATION ${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.hqwc.cn/news/157929.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot Web MVC

文章目录 一、Spring Boot Web MVC 概念二、状态码三、其他注解四、响应操作 一、Spring Boot Web MVC 概念 Spring Web MVC 是⼀个 Web 框架,一开始就包含在Spring 框架里。 1. MVC 定义 软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型、视…

Nginx域名重定向(如何访问的域名和实际的数据请求路径不同,可解决前端跨域)

感情需要被抑制,不能泛滥… 当需要将一个域名重定向到另一个域名并且用户仍然看到原始域名时,Nginx是一个强大的工具。这种场景通常涉及到反向代理或重写URL的技巧。在本篇博客中,我们将详细介绍如何使用Nginx来实现这个目标,以及…

GitLab(2)——Docker方式安装Gitlab

目录 一、前言 二、安装Gitlab 1. 搜索gitlab-ce镜像 2. 下载镜像 3. 查看镜像 4. 提前创建挂载数据卷 5. 运行镜像 三、配置Gitlab文件 1. 配置容器中的/etc/gitlab/gitlab.rb文件 2. 重启容器 3. 登录Gitalb ① 查看初始root用户的密码 ② 访问gitlab地址&#…

HTML区块、布局

HTML区块&#xff1a; HTML可以通过<div> 和 <span>将元素组合起来。大多数HTML元素被定义为块级元素或内联元素。块级元素在浏览器显示时&#xff0c;通常会以新行来开始、结束&#xff1b;内联元素在显示时通常不会以新行开始。 HTML<div>元素是块级元素…

记一次 logback 没有生成独立日志文件问题

背景 在新项目发布后发现日志文件并没有按照期望的方式独立开来&#xff0c;而是都写在了 application.log 文件中。 问题展示 日志文件&#xff1a; 项目引入展示&#xff1a; <include resource"paas/sendinfo/switch/client/sendinfo-paas-switch-client-log.…

正点原子嵌入式linux驱动开发——Linux 多点电容触摸屏

随着智能手机的发展&#xff0c;电容触摸屏也得到了飞速的发展。相比电阻触摸屏&#xff0c;电容触摸屏有很多的优势&#xff0c;比如支持多点触控、不需要按压&#xff0c;只需要轻轻触摸就有反应。ALIENTEK的三款RGB LCD屏幕都支持多点电容触摸&#xff0c;本章就以ATK7016这…

服务器数据恢复-VSAN环境下ESXI虚拟机无法访问的数据恢复方案

一、用户信息&#xff1a; 广东某单位 二、数据恢复环境&#xff1a; 主机操作系统&#xff1a;ESXI 分区类型&#xff1a;VSAN 存储介质清单 &#xff1a;一共8台服务器节点&#xff0c;每节点2个磁盘组&#xff0c;其中1个磁盘组配置1块SSD固态硬盘&#xff0c;4块1.2T机…

如何在MacOS使用homebrew安装Nginx

文章目录 Homebrew安装nginxbrew启动Nginxbrew关闭Nginx 参考文章地址 Homebrew安装nginx 在确保MacOS 安装Homebrew成功以后&#xff0c;执行如下命令 brew install nginx注意&#xff1a;Nginx安装成功后会提示目录位置&#xff1b;每个人的系统可能因为Homebrew的安装位置…

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN&#xff0c;对图片进行分类并使用图片进行测试模型-适合入门&#xff0c;从模型到训练再到测试&#xff1a;开源项目 开源项目完整代码及基础教程&#xff1a; https://mbd.pub/o/bread/ZZWclp5x CNN模型&#xff1a; 1.导入必要的库和模块&…

前端接口请求支持内容缓存和过期时间

前端接口请求支持内容缓存和过期时间 支持用户自定义缓存时间&#xff0c;在规则时间内读取缓存内容&#xff0c;超出时间后重新请求接口 首先封装一下 axios&#xff0c;这一步可做可不做。但是在实际开发场景中都会对 axios 做二次封装&#xff0c;我们在二次封装的 axios …

k8s之亲和性、污点

目录 亲和性 键值运算关系 硬策略 软策略 Pod亲和性与反亲和性 污点(Taint) 和 容忍(Tolerations) 污点(Taint) 容忍(Tolerations) 维护操作 故障排除步骤 亲和性 官方介绍&#xff1a;https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-nod…

asp.net旅游交流管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 旅游交流管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net旅游交流网站1 应用技…