话题编程流程

  • 创建发布者
  • 创建订阅者
  • 添加编译选项
  • 运行可执行程序

首先需要创建一个工作空间,然后再创建功能包
创建工作空间步骤:https://blog.csdn.net/qq_44989881/article/details/118566679

cd ~/catkin_ws/src

创建功能包

catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim


注:在创建一个新的功能包时,需要删除其它功能包,否则以下步骤有些指令无法执行。

例如
在刚创建的 learning_topic 目录中的src文件夹下创建一个 cpp文件

cd ~/catkin_ws/src/learning_topic/src
touch velocity_publisher.cpp


如何实现一个发布者

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

在 velocity_publisher.cpp 文件中写入以下代码。
以下代码的功能:为发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist

#include <ros/ros.h> // 引入 ros 库的头文件
#include <geometry_msgs/Twist.h>int main(int argc, char **argv)
{// ROS节点初始化ros::init(argc, argv, "velocity_publisher"); // velocity_publisher 为自定义的节点名字,节点名不能重复。// 创建节点句柄ros::NodeHandle n; // 管理节点的资源// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10ros::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;
}

在CMakeLists.txt中添加以下代码:

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
  • add_executable:通过指定的源文件列表构建出可执行目标文件。
  • target_link_libraries:该指令的作用为将目标文件与库文件进行链接。
cd ~/catkin_ws

编译工作空间

catkin_make

设置环境变量,让系统能够找到该工作空间

source devel/setup.bash

检查环境变量

echo $ROS_PACKAGE_PATH

启动ROS Master

roscore

启动小海龟仿真器

rosrun turtlesim turtlesim_node

启动自定义的海龟控制节点

rosrun learning_topic velocity_publisher

注意:rosrun是运行一个单独节点的命令,如果要运行多个节点,则需要使用多次rosrun命令。


用Python创建发布者步骤:

cd ~/catkin_ws/src/learning_topic

创建 scripts 文件夹

mkdir scripts

cd scripts

创建 velocity_publisher.py Python文件

touch velocity_publisher.py


注意:需要将Python设置为可执行文件。

用Python创建发布者代码:
以下代码的功能:为发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
from geometry_msgs.msg import Twistdef velocity_publisher():# ROS节点初始化rospy.init_node('velocity_publisher', anonymous=True)# 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)#设置循环的频率rate = rospy.Rate(10) while not rospy.is_shutdown():# 初始化geometry_msgs::Twist类型的消息vel_msg = Twist()vel_msg.linear.x = 0.5vel_msg.angular.z = 0.2# 发布消息turtle_vel_pub.publish(vel_msg)rospy.loginfo("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", vel_msg.linear.x, vel_msg.angular.z)# 按照循环频率延时rate.sleep()if __name__ == '__main__':try:velocity_publisher()except rospy.ROSInterruptException:pass

Python代码不需要重新编译,可以直接执行。

rosrun learning_topic velocity_publisher.py


提示:

关于设置环境变量,可以在 .bashrc 文件中配置,在Home文件夹下,按下快捷键 Ctrl + H,可以显示隐藏文件,找到 .bashrc 文件,并打开。

在.bashrc中的最后一行添加以下代码,然后保存。

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


这样设置的好处是每次运行程序都不用在 执行 source devel/setup.bash 来设置环境变量,仅现当前创建的工作空间,如果创建其它工作空间,需要再次配置 .bashrc。

ROS系统 用Python或C++实现发布者Publisher相关推荐

  1. ROS系统用python创建发布者与订阅者,并发布自定义话题消息

    ROS系统用python创建发布者与订阅者,并发布自定义话题消息 最近使用pythonros进行ROS系统开发,发现用python开发的教程挺少的,所以记录一下,废话不多说,开始教程: 一.创建工作空 ...

  2. 【ROS学习笔记】(三)发布者Publisher的实现

    一.目标功能 ROS Master内有两个节点,一个是Subscriber(turtlesim),一个是Publisher,发布者通过程序实现发布Message,Message的内容包括线速度.角度, ...

  3. 【OpenCV学习】 《OpenCV3编程入门》--毛星云 01 邂逅OpenCV(OpenCV基本概念与基本架构) ROS系统上的运用(python实现)

    对 <OpenCV3编程入门>第一章的学习笔记:理解什么是计算机视觉,什么是OpenCV,以及其中的联系等等. PS:此书为2014年出版,opencv的版本和接口也与现在有些不一致了,作 ...

  4. 基于ROS的机器人系统(Python实现)--1 ROS系统与安装

    基于ROS的机器人(Python实现)--1 ROS系统与安装 1 .1 ROS系统与安装 1.1.1 ROS概述 1.1.2 ROS安装 1.2 Roboware 安装与使用 1.3 Gazebo ...

  5. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...

  6. ROS入门-8.发布者Publisher的编程实现

    主要实现功能是:让我们在海龟仿真器里的海龟通过程序控制动起来 之前过程中,主要是通过命令行或者通过键盘控制形式来发布速度指令 以下是该话题通讯的问题模型 今天学习怎样通过一个程序来实现其中的发布者,其 ...

  7. [ROS基础-4] ROS系统框架

    系列文章目录 [ROS基础-1] Linux系统介绍与ubuntu安装(virtualbox) [ROS基础-2] Ubuntu系统基本操作与基本命令讲解 [ROS基础-3] ROS系统安装与基本配置 ...

  8. SLAM导航机器人零基础实战系列:(二)ROS入门——2.ROS系统整体架构

    SLAM导航机器人零基础实战系列:(二)ROS入门--2.ROS系统整体架构 摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机 ...

  9. ROS系统 创建工作空间与功能包

    ROS 学习目标: 学习内容: 使用环境 操作步骤: 基本命令 二.使用步骤 创建工作空间 编译工作空间 创建功能包 使用C++执行程序 编写源文件 编辑功能包下的 Cmakelist.txt文件 修 ...

最新文章

  1. 绿色版mysql使用方法
  2. AndroidStudio编译提示Could not find com.android.tools.lintlint-gradle26.1.3问题的解决
  3. adodb.stream文件操作类
  4. ProE常用曲线方程:Python Matplotlib 版本代码(玫瑰曲线)
  5. C语言高级编程:大端模式和小端模式(Big-Endian和Little-Endian)
  6. 制作整人计算机病毒,bat整人电脑病毒代码是怎样的.docx
  7. 魏德米勒端子eplan宏_魏德米勒端子选型图册(完全版).pdf
  8. 怎么查看电脑最大支持扩展内存
  9. Online Calculators (在线计算器) - Math Calculators (数学计算器)
  10. ubuntu nvidia驱动更新
  11. 马克思趣味数学题用java_在马克思手稿中有一道趣味的数学问题
  12. kali安装软件源软件
  13. 导数的四则运算法则_导数、微分、积分之间的区别与联系
  14. 打造高质量的私域朋友圈,让营销效果翻倍
  15. VIN码识别-汽修行业新技术
  16. 掘金15W沸点简单分析(二)
  17. 会议系统m900服务器网口灯,中兴视频会议mcu服务器zxv10-m900
  18. c++实现微妙级时间统计
  19. 台达编码器型号含义_台达光学式旋转编码器
  20. 考研这么累,能支持你坚持到底的是什么?

热门文章

  1. 转: 常见加密算法分,用途,原理以及比较
  2. 11g新特性-SQL Plan Management
  3. 统一代码段与非一致代码段
  4. jQuery学习之jQuery Ajax用法详解
  5. 出现次数超过一半的数字
  6. 在android上面让TextView 过多的文字实现有滚动条 scrollview
  7. Android中用GridView实现九宫格的两种方法
  8. iOS开发:动态添加按钮
  9. STL之七:STL各种容器的使用时机详解
  10. golang中的web服务平滑重启