[ROS]一、ROS的基本概念
[ROS]二、命令与工具的使用
[ROS]三、建立工作空间

文章目录

  • 前言
  • 一、话题发布/订阅模型
  • 二、实现的步骤
    • 1.创建功能包(上一章节有讲)
    • 2.实现发布者的流程
    • 3.配置发布者代码编译规则
    • 4.实现同一功能的python版程序
  • 总结

前言

在之前的教程中,我们是通过命令行的形式和键盘的控制形式使得海龟动起来,现在通过程序的方式实现海龟动起来


提示:以下是本篇文章正文内容,下面案例可供参考

一、话题发布/订阅模型

这个模型中主要有两个节点(node)一个是速度发布节点Publisher(Turtle Velovity),一个是订阅节点Subscriber(turtlesim)即海龟仿真器,今天要通过程序实现的就是速度发布节点Publisher(Turtle Velovity),来发布Message,这个Message的结构是geometry_msgs::Twist,里面分为角速度和线速度,再通过话题Topic(/turtle1/cmd_vel)这个管道把数据传送给Subscriber(turtlesim),Subscriber(turtlesim)就可以订阅这些数据来控制海龟

二、实现的步骤

1.创建功能包(上一章节有讲)

打开终端输入下面的命令

cd ~/catkin_ws_me/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim  #learning_topic功能包的名称,后面就是依赖

2.实现发布者的流程

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

首先切换到learning_topic/src目录下

cd ~/catkin_ws_me/src/learning_topic/src

创建名为velocity_publisher.cpp的文件,将如下的代码粘贴进去,这个是采用c++来实现的

/*** 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist*/#include <ros/ros.h>
#include <geometry_msgs/Twist.h>int main(int argc, char **argv)
{// 用ros::init完成ROS节点初始化,(argc, argv是两个参数,默认就可以了,不需要配置)velocity_publisher为节点名,注意节点名称是不可以重复的ros::init(argc, argv, "velocity_publisher");// 创建节点句柄,管理ros的API接口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_msgvel_msg.linear.x = 0.5;vel_msg.angular.z = 0.2;// 发布消息。利用publish方法发布vel_msg数据内容turtle_vel_pub.publish(vel_msg);//类似print使得相关信息显示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;
}

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

这个时候就需要编辑CMakelists.txt文件,目的是为了

  • 设置需要编译的代码和生成的可执行文件;
  • 设置连接库
    打开如图选中的文件
    然后将下面这两句话放到这个位置
    add_executable(velocity_publisher src/velocity_publisher.cpp)这句话的意思是将src/velocity_publisher.cpp这个文件编译生成velocity_publisher可执行文件;target_link_libraries的功能是将velocity_publisher可执行文件跟ros的一些库做连接,eg.C++或则python的一些接口。
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

然后回到工作空间的根目录下来做编译。

cd ~/catkin_ws_me
catkin_make
source devel/setup.bash #添加换进变量。
roscore #第一个终端运行
rosrun turtlesim turtlesim_node #第二个终端运行
rosrun learning_topic velocity_publisher    #第三个终端运行

执行上面的命令将会出现如下图的结果

4.实现同一功能的python版程序

在learning_topic文件创建文件夹scripts来存放python文件,如图

注意:python文件一定要赋予它可执行文件,右键选择属性,点击权限,将允许做为可执行文件这个选项打勾

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twistimport 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.9vel_msg.angular.z = 0.9# 发布消息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

总结

好了今天就学到这里了,不要放弃前进的脚步。

[ROS]四、发布者Publisher的编程实现相关推荐

  1. ros(2) 发布者publisher的编程实现

    1.创建功能包 cd ~/testROS_ws/src catkin_create_pkg topic_publisher std_msgs rospy roscpp geometry_msgs tu ...

  2. 【RK3399Pro学习笔记】六、ROS发布者Publisher的编程实现

    目录 如何实现一个发布者 C++ 创建功能包 编写程序 配置CMakeLists.txt 编译并运行发布者 python 创建并编写脚本 运行 平台:华硕 Thinker Edge R 瑞芯微 RK3 ...

  3. 【ROS入门21讲二刷古月居】学习笔记3 发布者Publisher的编程实现

    系列文章目录 第一章 ROS命令行工具 第二章 创建工作空间与功能包 第三章 发布者Publisher的编程实现 文章目录 系列文章目录 话题模型 第一步,创建功能包 如何实现一个发布者 包含库 初始 ...

  4. 【ROS入门21讲】发布者Publisher的编程使用

    [ROS入门21讲]发布者Publisher的编程使用 本文章是针对bilibili古月居up的[ROS入门21讲]所作的笔记,笔记从第8讲开始,主要记录一些关键内容方便查阅. 视频连接:[ROS入门 ...

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

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

  6. 10.发布者Publisher的编程实现

    学习视频:https://www.bilibili.com/video/BV1zt411G7Vn?t=1225&p=10 目标:通过程序发布指令让小海龟运动 一.创建工作空间和功能包 1.创建 ...

  7. ROS学习笔记publisher的编程实现c++详解

    前言 基于B站ROS公开课:[古月居]古月·ROS入门21讲 基于Ubuntu 20.04.1.Noetic版本 提示:以下是本篇文章正文内容,下面案例可供参考 一.ros publisher C++ ...

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

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

  9. QT开发(四十)——GraphicsView编程

    QT开发(四十)--GraphicsView编程 一.QGraphicsScene 1.QGraphicsScene QGraphicsScene继承自QObject,是一个管理图元的容器,与QGra ...

最新文章

  1. 性能提升3倍的树莓派4,被爆设计缺陷!
  2. Tapestry IoC Decorator
  3. Flask 教程 第十六章:全文搜索
  4. jQuery的this $this $(this)
  5. SpringCloudConfig(了解)
  6. linux ntfs 密码,linux 加载ntfs和fat32分区
  7. 组内Linq培训记录
  8. 解决Caused by: java.io.IOException: java.io.IOException: error=12, Cannot allocate memory
  9. springboot调用so文件
  10. 微信小程序实现人脸识别认证
  11. MySQL二进制日志文件格式
  12. 为什么计算机能读懂 1 和 0
  13. IEEE Transactions on Vehicular Technology投稿经验分享-1
  14. Mac 隔空投送 AirDrop 搜不到 iPhone
  15. android sdk tools是什么意思,android sdk tools有什么用
  16. 怎么把一副图片用PS调成简笔画?
  17. linux centos 访问根目录 not accessable
  18. python创建学生类姓名学号_定义一个学生类,包含学号、姓名、平时成绩和考核成绩四个数据成员和以下成员方法(用Python语言):...
  19. 梅科尔工作室——鸿蒙设备开发实战004:内核开发
  20. C语言实现简单的四则运算计算器

热门文章

  1. C语言·编写程序输入名和姓,然后输出“名,姓”。
  2. 如何使用Microsoft的Support站点
  3. 微型计算机主机能玩荒野行动吗,《荒野行动》PC版什么配置能玩?
  4. 第一天开博,发篇搞笑的。
  5. android 画虚线,虚线不能正常显示问题
  6. pandasnumpy 数据处理~~两万字超全
  7. r-studio扫描后各种颜色_爱普生扫描仪 | 珍藏点滴时光,复刻美好生活
  8. 分享一个free微信组件——预约吧
  9. 嵌入式软硬件协同设计的过程
  10. 有趣的QQ签名(值得借鉴哦 !)