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

目录

  • 如何实现一个发布者
  • C++
    • 创建功能包
    • 编写程序
    • 配置CMakeLists.txt
    • 编译并运行发布者
  • python
    • 创建并编写脚本
    • 运行

平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro
固件版本:Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615


记录自【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 —— 古月居GYH P10 10.发布者Publisher的编程实现

如何实现一个发布者

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

C++

创建功能包

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

编写程序

nano ~/catkin_workspace/src/learning_topic/src/velocity_publisher.cpp
/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************//*** 该例程将发布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,队列长度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("Publish 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

nano ~/catkin_workspace/src/learning_topic/CMakeLists.txt

Build内,Install前加入

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

设置需要编译的代码和生成的可执行文件;
设置链接库;
在这里插入图片描述

编译并运行发布者

cd ~/catkin_workspace
catkin_make# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic velocity_publisher# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rqt_graph

在这里插入图片描述
在这里插入图片描述

python

创建并编写脚本

cd ~/catkin_workspace/src/learning_topic
mkdir scripts
cd ~/catkin_workspace/src/learning_topic/scripts
nano velocity_publisher.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
######################################################################### 该例程将发布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.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

运行

sudo chmod +x ~/catkin_workspace/src/learning_topic/scripts/velocity_publisher.py# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic velocity_publisher.py# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rqt_graph

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400300.shtml

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

相关文章

linux下svn命令大全

1、将文件checkout到本地目录 svn checkout path&#xff08;path是服务器上的目录&#xff09; 例如&#xff1a;svn checkout svn://192.168.1.1/pro/domain 简写&#xff1a;svn co 2、往版本库中添加新的文件 svn add file 例如&#xff1a;svn add test.php(添加test.php)…

PHP 从结果集中取得一行作为关联数组:

<?php // 假定数据库用户名&#xff1a;root&#xff0c;密码&#xff1a;123456&#xff0c;数据库&#xff1a;RUNOOB $conmysqli_connect("localhost","root","123456","RUNOOB"); if (mysqli_connect_errno($con)) { echo…

三星:Android之外,技术为王

作为Android阵营的领军代表&#xff0c;三星手机为行业与消费者带来了深远的影响与改变&#xff0c;以至于一提到三星&#xff0c;几乎所有人的第一印象都是三星手机。事实上&#xff0c;在手机之外的众多产品领域中&#xff0c;三星同样有着惊人的成绩与贡献。三星的显示器产品…

ASP.NET Core 源码学习之 Logging[3]:Logger

上一章&#xff0c;我们介绍了日志的配置&#xff0c;在熟悉了配置之后&#xff0c;自然是要了解一下在应用程序中如何使用&#xff0c;而本章则从最基本的使用开始&#xff0c;逐步去了解去源码。 LoggerFactory 我们可以在构造函数中注入 ILoggerFactory&#xff0c;来创建一…

【RK3399Pro学习笔记】七、ROS订阅者Subscriber的编程实现

目录如何实现一个订阅者C编写程序配置CMakeLists.txt编译并运行发布者python创建并编写脚本运行平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 记录自【古月居】古月ROS入门21讲 | 一学就会的ROS机…

C#操作sql通用类 SQLHelper

Codeusing System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Collections; using System.Data.SqlClient;/// <summary> /// 数据库的通用访问代码 /// 此类为抽象类&#xff0c;不允许实例化&#x…

PHP中变量类型的判断

PHP中变量类型的判断 一、gettype() gettype 会根据 参数类型返回下列值 “boolean”&#xff08;从 PHP 4 起&#xff09; “integer” “double”&#xff08;如果是 float 则返回“double”&#xff0c;而不是“float”&#xff09; “string” “array” “object”…

SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?...

最近和同事处理一个小程序&#xff0c;数据量不是特别大&#xff0c;某表的的数据记录&#xff1a;7000W条记录左右&#xff0c;但是从改别执行一次查询时&#xff0c;却发现查询速度也不快&#xff0c;而且最明显的问题就是CPU100%。 sql语句&#xff1a; select gridid,lng,l…

时间比金钱金贵得多

工资是一个非常直观的参数&#xff0c;所有人都会被它的数字所诱惑&#xff0c;但工资的背后&#xff0c;体现的是你劳动的性价比&#xff0c;是万不可用工资去交换。 第一个故事 一个35岁左右的白骨精来找我们&#xff0c;她需要在两个工作里面做选择。一个是年薪30万的制片总…

【RK3399Pro学习笔记】八、ROS话题消息的定义与使用

目录自定义话题消息定义msg文件在package.xml中添加功能包依赖在CMakeLists.txt添加编译选项编译结果使用C编写程序person_publisher.cppperson_subscriber.cpp配置CMakeLists.txt编译并运行python编写程序person_publisher.py运行平台&#xff1a;华硕 Thinker Edge R 瑞芯微 …

ios 打电话结束返回到应用中

在我们做打电话这个功能时&#xff0c;我们常常是调用这个方法&#xff1a; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"tel://xxxxx"]]; 然而&#xff0c;这样实现了功能后&#xff0c;结束通话后&#xff0c;确不能回到自己的应用中来。最…

php 字符符转整数

intval() $my_month intval($my_format_date[1]);

C语言及程序设计进阶例程-17 认识链表

贺老师教学链接 C语言及程序设计进阶 本课讲解 例 建立并输出一个简单链表 #include <stdio.h> struct Student {int num;float score;struct Student *next; }; int main( ) {struct Student a,b,c,*head,*p;a. num31001;a.score89.5;b. num31003;b.score90;c. num3100…

【RK3399Pro学习笔记】九、ROS客户端Client的编程实现

目录如何实现一个客户端C创建功能包编写程序配置CMakeLists.txt编译并运行python创建并编写脚本运行平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 记录自【古月居】古月ROS入门21讲 | 一学就会的…

(原创)UML要点总结

今天我们总结要点&#xff1a; 我们就从这张图慢慢讲。 一。类图部分 基础&#xff1a; 类图→长方形表示。类名在最上栏&#xff0c;下面是数据&#xff0c;第三栏是方法。其存在两种关系&#xff1a;关联和泛化 属性&#xff1a; 全形&#xff1a; 可见性 名&#xff1a;类…

Android - Okhttp拦截器

Okhttp-wiki 之 Interceptors 拦截器转载于:https://www.cnblogs.com/qlky/p/7298470.html

PHP 函数 - 返回值

<?php function sum($x,$y) {$z$x$y;return $z; }echo "5 10 " . sum(5,10) . "<br>"; echo "7 13 " . sum(7,13) . "<br>"; echo "2 4 " . sum(2,4); ?> http://www.w3school.com.cn/php/php_f…

Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/46290985 Container技术&#xff1a; 传统的虚拟化技术&#xff1a; 通过对硬件层模拟&#xff0c;从而实现了能够在一套硬件上面运行多个操作…

杭电4639

居然在最后的输出形式那里卡了很久&#xff0c;忘记除10007&#xff0c;忘记输出Case 希望下次不要犯这种错误 #include "iostream" #include "string.h" using namespace std; int f[10100][100],maxb0; char list[110][10100]; int max(int a,int b){ret…

【RK3399Pro学习笔记】十、ROS服务端Server的编程实现

目录如何实现一个服务器C编写程序配置CMakeLists.txt编译并运行python创建并编写脚本运行平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 记录自【古月居】古月ROS入门21讲 | 一学就会的ROS机器人入…