IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【ROS学习笔记】6.发布者Publisher的编程实现(C++和Python) -> 正文阅读

[人工智能]【ROS学习笔记】6.发布者Publisher的编程实现(C++和Python)


前面提到的通信模式之一的Topic模式,其使用“发布订阅”的方式来通信。
我们之前是通过命令行或键盘操控的形式让海龟动起来的,这次我们直接编译一个程序来控制它。
本节通过创建一个发布者Publisher来控制海龟。
我们先看要实现的这个小程序的图。
(部分图摘自:b站【古月居】古月·ROS入门21讲)

1 模型图

图中,我们使用ROS Master管理节点。
有两个主要节点:
Publisher,Turtle Velocity 即海龟的速度
Subscriber,即海龟仿真器turtlesim
Turtle Velocity为Publisher,发布Message(即海龟的速度信息,以geometry_msgs::Twist的数据结构,包括线速度和角速度),通过Topic(/turtle1/cmd_vel)的总线管道,将数据传输给Subscriber。Subscriber订阅得到的速度信息,来控制海龟发生运动。

在这里插入图片描述

2 创建功能包

我们之前已经创建了工作空间了,这次我们在src文件夹创建一个新的功能包learning topic

cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

在这里插入图片描述

3 创建Publisher代码(以C++为例)

关于如何实现一个Publisher:

  • 初始化ROS节点
  • 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
  • 创建消息数据
  • 按照一定的频率循环发布消息

先以C++为例(后面会讲Python的情形),我们这次需要在src里创建C++的代码文件以输入代码。源码见下。
(源码地址:https://github.com/guyuehome/ros_21_tutorials/blob/master/learning_topic/src/velocity_publisher.cpp)
在这里插入图片描述将这个cpp文件创建在src文件夹下:
在这里插入图片描述

4 编译代码(以C++为例)

有了代码,接下来编译。

配置Publisher代码编译规则

首先需要配置CMakeLists.txt中的编译规则:

  • 设置需要编译的代码和生成的可执行文件
  • 设置链接库

将下列代码拷贝至CMakeLists.txt中:

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

拷贝到下图这个位置(代码的作用见图):
在这里插入图片描述

执行编译

回到工作空间目录,执行编译.

cd ~/catkin_ws
catkin_make

在这里插入图片描述

source 一下 setup.bash

我们之后每次运行这个程序都需要source一下devel/setup.bash,我们不妨将
source devel/setup.bash放入环境变量.bashrc中。
在这里插入图片描述

运行

打开终端,分别运行:

roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic velocity_publisher

在这里插入图片描述
海龟就按照我们之前代码中设定的线速度和角速度画圆啦!

我们编译好的程序是放在devel/lib目录下的:
在这里插入图片描述

5 创建Publisher代码(以Python为例)

下面我们详述Python的实现方法。
Python的步骤中,在“配置发布者代码编译规则”和“编译并执行”这俩步骤有些不同,前面都一样。

查看内置Python版本

Ubuntu20.04内置了Python3.8,可见 /src/bin 目录下:
在这里插入图片描述我们在终端使用python3命令可调用python,比如查看版本号:

python3 --version

在这里插入图片描述

创建Python代码

python代码文件是放在功能包文件夹下的scripts目录下的,我们需要新建一个scripts文件夹。
在这里插入图片描述复述一下实现Publisher的方法:

  • 初始化ROS节点
  • 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
  • 创建消息数据
  • 按照一定的频率循环发布消息

我们把我们的Python版的代码拷贝到目录下。
(源码地址:https://github.com/guyuehome/ros_21_tutorials/blob/master/learning_topic/scripts/velocity_publisher.py)
(注意:第31行 rospy.loginfo("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]",原作者没对齐,手动对齐一下)
在这里插入图片描述右击文件→属性,打开执行权限:
在这里插入图片描述

6 编译代码(以Python为例)

有了代码,接下来编译。

配置代码编译规则

在新的Noetic版本的ROS中,需要配置这一步,貌似之前的版本不需要配置。

我们配置一下CMakeLists.txt中的编译规则:
将文件中的catkin_install_python这段取消注释,并将默认的my_python_script改成velocity_publisher.py
在这里插入图片描述

执行编译

回到工作空间目录,执行编译.

cd ~/catkin_ws
catkin_make

在这里插入图片描述

source 一下 setup.bash

如前所述,需要将source devel/setup.bash放入环境变量.bashrc中。
我们前面C++的时候这句话已经放进去了。

运行

打开终端,分别运行:

roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic velocity_publisher.py

python直接执行功能包下的这个py文件就行了。
在这里插入图片描述小海龟一样跑起来啦~

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:03:28  更:2022-01-16 13:05:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 22:21:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码