ROS中工作空间和功能包的创建以及发布者Publisher的实现

2023-05-16

最近刚刚开始学习ROS,对于整个ROS的框架和功能正在一点点的了解,跟着B站古月居的《ROS入门21讲》课程,在安装好linux和ROS后,正式开始ROS的学习,动手实践敲代码,在这里先记录一下开始ROS项目的第一步,同时我安装的ROS版本为Noetic。
此次功能的实现是在ROS经典教程小乌龟运动上进行的。

创建工作空间和功能包

工作空间(worksspace)是一个存放工程开发相关文件的文件夹,咱们创建主文件夹catkin_ws,其中创建以下四个子文件夹:

  • src:代码空间(Source Space)
  • build:编译空间(Build Space)
  • devel:开发空间(Develpment Space)
  • install:安装空间(Install Space)

下面为实际操作:

1.创建工作空间

先在主目录里面创建catkin_ws文件夹,在主目录中打开终端。

$  mkdir catkin_ws

也可以是别的目录,后面要设置一个环境变量,会用到已创建的工作空间里面的一个文件,如果不用主目录,在写文件路径的时候会比较麻烦。同时这个文件夹的文件不一定必须要命名为catkin_ws。但是上面所说的工作空间里面的四个文件夹,文件命名不能修改!

进入catkin_ws文件,创建src文件夹,这个文件夹是咱们一开始创建的,跟普通文件夹性质一样。

$  cd catkin_ws
$  mkdir src

进入src文件夹。

$  cd src

把当前的文件夹初始化,把他从一个普通的文件夹变成ROS的一个工作空间。

$  catkin_init_workspace

在这里插入图片描述

退回到catkin_ws文件夹。

$  cd ..

下面是编译命令;这个是catkin工具提供的编译器的指令,编译src功能包里面的源码,然后结果放到devel和build文件夹里面。

$  catkin_make

在这里插入图片描述

创建install文件夹,这个文件不会在工作空间初始化后自己生成,需要自己编译创建。

$  catkin_make install

在这里插入图片描述

目前在catkin_ws里面有四个文件夹,各自的功能如下:

  • src::放置功能包的源码,后面Publisher发布的话题内容文件夹就放置在这个文件夹里面。
  • install:放置最终编译生成的可执行文件,这个文件可没有。
  • devel:开发空间,用于存放编译生成的目标文件,包括头文件、动态&静态链接库、可执行文件,作用和install类似。
  • build:编译空间,放置编译的中间文件,二进制文件,存放CMake和catkin的缓存信息、配置信息和其他中间文件。

2.创建功能包

进入src文件夹。

$  cd ~/catkin_ws/src

创建功能包,名字为learning_topic,后面五个是依赖的五个工具包,可以用C++或者Python语言来写话题内容。

$  catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

在这里插入图片描述

3.创建发布者代码

然后在catkin_ws/src/learning_topic/src里面创建velocity_publisher.cpp文件,可以使用下面的命令:

$  touch velocity_publisher.cpp

然后使用vim命令,打开这个文件夹。

$  vim  velocity_publisher.cpp

把下面的代码复制粘贴上去,如果复制粘贴不上去,请看一下回头看一下linux命令,文件管理和编辑。或者直接右键:用文本编辑器打开。
下面的代码这次就不详细讲解了,只说一下大致的功能。大部分都有注释,代码在《古月ROS21讲》视频配套的文件里有,去古月居公众号找一下。另外这是C++语言的,因为在创建功能包的时候,咱们不光加入了C++的依赖也加入了Python的依赖,所以也可以使用Python编写,Python编写的整体风格要比C++简约的多。
在下面的代码中,实现了几个效果:

  • 初始化ROS节点;
  • 向ROS Master 注册节点信息,包括发布的话题名和话题中的消息类型;
  • 创建消息数据;
  • 按照一定频率循环发布消息。
/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */
 
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char **argv)
{
	// ROS节点初始化
	ros::init(argc, argv, "velocity_publisher");

	// 创建节点句柄
	ros::NodeHandle n;

	// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
	ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);

	// 设置循环的频率
	ros::Rate loop_rate(10);

	int count = 0;
	while (ros::ok())
	{
	    // 初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;

	    // 发布消息
		turtle_vel_pub.publish(vel_msg);
		ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
				vel_msg.linear.x, vel_msg.angular.z);

	    // 按照循环频率延时
	    loop_rate.sleep();
	}

	return 0;
}

4.配置发布者代码编译规则

在catkin_ws/src/learning_topic/CMakeLists.txt中加入以下代码,位置是在CMakeLists.txt中的install标题上面。

	add_executable(velocity_publisher src/velocity_publisher.cpp)
    target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

add_executable这个函数是把velocity_publisher.cpp文件编译成可执行文件velocity_publisher。
target_link_libraries函数把上面生成的可执行文件velocity_publisher和ROS相关的库作链接,像是C++、Python库

5.编译并运行发布者

咱们再回到catkin_ws文件夹:

$  cd ~/catkin_ws

进行编译:

$  catkin_make

在这里插入图片描述

随后需要设置环境变量:

$  source devel/setup.bash

如果不想每次执行这个文件,配置环境变量 ,在主目录下按快捷键Ctrl+H,显示出隐藏的文件,在.bashrc文件里面的最后加上

echo "source /home/yzxie/catkin_ws/devel/setup.bash">> ~/.bashrc

或者

source /home/yzxie/catkin_ws/devel/setup.bash

这里注意第二行代码中,/home意思是在主目录里面,如果你一开始catkin_ws文件不是创建在主目录下,这里就要盖面路径,/yzxie/是你linux系统的用户名。

随后重新打开终端,输入一下命令;

$  roscore

在这里插入图片描述

不要关闭,Ctri+Atl+T再重新打开一个终端,输入以下命令:

$  rosrun turtlesim turtlesim_node

在这里插入图片描述

运行之后就会看到小乌龟的界面,小海龟的皮肤每次都是随机,每次都像开盲盒。然后Ctri+Atl+T再重新打开一个终端,输入以下命令:

$  rosrun learning_topic velocity_publisher

在这里插入图片描述
然后小乌龟就按照咱们C++程序中设定的,以一定的角速度旋转,咱们的整个功能也就实现了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS中工作空间和功能包的创建以及发布者Publisher的实现 的相关文章

  • Python 实现 Dijkstar 路径规划算法

    Dijstar 最短路径算法 用于计算起始点到最终点的最短路径 一般采用的是贪心算法策略 原理可以参考 图解 Open list 和 close list 环境 Terminal 需要预先安装两个库 matplotlib 和 math pi
  • ROS系统基本功能的使用详解(基本指令/节点/服务/启动文件/动态参数)

    ROS系统基本功能的使用详解 一 创建工作空间 二 创建与编译ROS功能包 三 ROS的基本命令 3 1 节点 3 2 主题 3 3 服务 3 4 参数服务器 四 节点的创建与运行 4 1 创建源文件 4 2 修改CMakeLists tx
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • ros 中ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdist

    ros 中ERROR cannot download default sources list from https raw githubusercontent com ros rosdistro master rosdep sources
  • V-REP安装

    小知识 是当前目录 是父级目录 是根目录 1 下载V REP 官网地址 http www v rep eu downloads html 我用ubuntu16 04下载V REP PRO EDU V3 5 0 Linux tar 2 解压安
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • ROS2踩坑记录

    Vscode 显示 找不到module 以此选择 设置 Python 在setting json中编辑 在 python autoComplete extraPaths 中添加额外的第三方库路径 如 opt ros foxy lib pyt
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • ModuleNotFoundError: No module named ‘rosbag‘

    1 ModuleNotFoundError No module named rosbag File opt ros kinetic lib python2 7 dist packages roslib launcher py line 42
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • Raspberry Pi 上 ROS 服务器/客户端通过GPIO 驱动硬件

    ROS 服务 现在 想象一下你在你的电脑后面 你想从这个服务中获取天气 你 在你身边 被认为是客户端 在线天气服务是服务器 您将能够通过带有 URL 的 HTTP 请求访问服务器 将 HTTP URL 视为 ROS 服务 首先 您的计算机将
  • Ubuntu安装ROS

    原文链接 https blog csdn net qq 44830040 article details 106049992 这也是我在ubuntu里面安装ROS的第N次 以前每次安装过程都忘记总结了 导致每次安装ROS都浪费了很多的时间用
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 如何访问 Heroku 中的 docker 容器?

    我已按照此处构建图像的说明进行操作 https devcenter heroku com articles container registry and runtime getting started https devcenter her
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • 如何在Windows上安装机器人操作系统ROSJava?

    ROS 的文档很糟糕 一个很大的讽刺是 ROS 的 Groovy 和 ROSJava 版本的创建是为了让 Windows 等平台上的开发人员能够利用出色的机器人 SDK 而所有安装说明仍然面向 Linux ubuntu 用户 The ROS

随机推荐

  • 【python】python语法糖

    python 语法糖 1 什么是语法糖 x1f36c 语法糖是由编程语言提供的一种可以让我们写出来的代码在不影响语句执行的功能的条件下 xff0c 能够让我们的代码看起来更简洁和美观的一种语法 很多人刚开始接触语法糖的时候 xff0c 总会
  • 因装了python3.6版本导致ubuntu下terminal无法打开

    参考stack overflow xff1a https stackoverflow com questions 61144232 updated to python 3 8 terminal wont open fixed but det
  • E: 无法下载 https://mirrors.tuna.tsinghua.edu.cn/kali/dists/kali-rolling/main/Contents-amd64.gz 文件尺寸不符

    本人是新手 这个问题困扰了我很久 在网上也查了很久 答案千篇一律 我写下我的解决方法 希望对你有帮助 问题 E 无法下载 https mirrors tuna tsinghua edu cn kali dists kali rolling
  • 软件工程知识点总结

    1 软件的本质 1 1 软件是什么 xff1a 软件是能够完成预定功能和性能 xff0c 并对相应数据进行加工的程序和描述程序操作的文档 1 2 软件的特点 软件是设计开发的 xff0c 而不是传统意义上生产制造的软件不会 磨损 虽然整个工
  • C++ lambda表达式如何理解?编译器做了什么

    lambda表达式在C 43 43 11中引入 xff0c 用lambda表达式表示匿名函数非常方便 xff0c 语法很简单 xff0c 而且可以使代码更紧凑 xff0c 更易于阅读 一个例子 xff1a span class token
  • mysql主从复制&读写分离

    文章目录 本文内容前言1 MySQL主从复制1 1 介绍1 2 搭建1 2 1 准备工作1 2 2 主库配置1 2 3 从库配置 1 3 测试 2 读写分离案例2 1 背景介绍2 2 ShardingJDBC介绍2 3 数据库环境2 4 初
  • 输出所有质数

    1 实验目的 了解数字 布尔值 字符串 列表 元组 字典 集合等Python常用的变量类型 熟练掌握运算符 内置函数的用法 熟练掌握元素常用方法 切片和列表推导式 2 实验内容 xff08 一 xff09 输出所有质数 输入一个整数 xff
  • 声音克隆项目实现

    声音克隆 原理介绍 第一个模块 xff1a 收到说话人音频 xff0c 然后转成这样一个低维表征向量speaker embedding xff0c xff08 这个向量富含说话信息 xff09 实现方式 xff1a 由于是无监督学习 xff
  • c语言枚举类型

    定义 在c语言中 xff0c 枚举类型定义用关键字enum标识 xff0c 形式为 xff1a enum 名字 枚举数据表 xff08 用 xff0c 隔开 xff09 xff1b 注意 xff1a xff08 1 xff09 enum是关
  • 交换机二三层协议及其详细解答

    交换机二三层协议及其详细解答 概述二层协议三层协议以太网协议示例代码 CSMA CD协议示例代码 IP协议示例代码 概述 交换机是网络设备的一种 xff0c 主要用于连接多个网络设备 xff0c 以实现网络通信和数据传输 交换机的协议分为两
  • C++ MVC模式

    概述 C 43 43 是一种流行的编程语言 xff0c 它可以用于构建各种类型的应用程序 xff0c 包括Web应用程序 桌面应用程序和移动应用程序 在这里 xff0c 我将为您介绍C 43 43 中的MVC模式 xff0c 以及如何在C
  • C++ 线程操作

    C 43 43 线程操作 概述 线程是 Linux 操作系统中的一种轻量级进程 xff0c 用于实现并发执行 线程可以共享进程的资源 xff0c 包括内存 文件句柄等 在 C 43 43 中 xff0c 线程操作由标准库提供支持 xff0c
  • QT常用类型字节数组QByteArray及其基本使用

    目录 概述特点常见函数QByteArray append xff1a QByteArray insert xff1a QByteArray replace xff1a QByteArray remove xff1a QByteArray t
  • QT图像处理类QImage常见使用方法

    目录 概述加载和保存图像图像缩放和旋转图像灰度化QImage convertToFormat 图像二值化threshold 函数 loadFromData 从内存加载图像拓展 概述 Qt 是一个跨平台的 C 43 43 库 xff0c 提供
  • pytorch卷积神经网络中间特征层可视化

    前言 在我们使用神经网络的过程中 xff0c 经常会好奇中间的网络到底学到了些什么 xff0c 所以常常想用可视化的方法来输出这些特征层 xff0c 所以惊天带大家用一个简易的网络来输出这些特征层 搭建网络 span class token
  • C++11 lambda表达式在回调函数中的使用

    C 43 43 11 lambda表达式在回调函数中的使用 一 lambda表达式在C 43 43 异步框架中的应用1 一个boost asio的例子2 C 43 43 http框架cutelyst在异步执行PostgreSQL数据库sql
  • MySQL知识点总结(一)

    文章目录 前言最左前缀匹配规则Mysql中sql语句执行太慢 xff0c 是什么原因 xff0c 怎么解决 xff0c 用什么命令查看如何查看是否用到索引为啥加了索引会变快判断是否走联合索引总结 前言 本文来介绍数据库啦 最左前缀匹配规则
  • 基于 NCC/灰度信息 的模板匹配算法(QT + Opencv + C++),10ms内获取匹配结果,部分源码

    文后代码 xff0c 优化效果图结尾处 xff0c 最快3ms得到匹配结果 NCC xff0c 全称为Normalized Cross Correlation xff0c 即归一化互相关系数 xff0c 在模板匹配中使用的非常非常广泛 xf
  • 网络应用基础 ——(2023新星计划文章二)

    一 xff0c TCP报头解析 数据打包与解析直观图 xff1a 1 0报文与报文字段 1 0 1 报文 报文是计算机网络中交换信息的基本单位 xff0c 是一种用于在网络中传递数据的结构化数据格式 在网络通信中 xff0c 数据会被封装成
  • ROS中工作空间和功能包的创建以及发布者Publisher的实现

    最近刚刚开始学习ROS xff0c 对于整个ROS的框架和功能正在一点点的了解 xff0c 跟着B站古月居的 ROS入门21讲 课程 xff0c 在安装好linux和ROS后 xff0c 正式开始ROS的学习 xff0c 动手实践敲代码 x