古月居 ROS 21 讲3

2023-11-07 21:30
文章标签 21 ros 古月

本文主要是介绍古月居 ROS 21 讲3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

古月居 ROS 21 讲

3 发布者Publisher的编程实现

1)功能包的创建:
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
在这里插入图片描述
2)创建发布者代码(cpp)
如何实现一个发布者:

• 初始化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节点初始化,节点名字:velocity_publisherros::init(argc, argv, "velocity_publisher");// 创建节点句柄,管理ros相关的API资源ros::NodeHandle n;// 创建一个Publisher,发布速度指令,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10 ,将要发布的数据放到队列里面,在根据实际发送能力再进行发送(类似于缓存,保证保存的10个数据是最新数据)。ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);// 设置while循环的频率(loop_rate)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;//角速度// 发布消息// 发布//ROS底层一系列通讯机制将数据压入队列,队列通过底层以太网ROStopic的TCP的通讯机制发出数据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);// 按照循环频率延时,根据while循环设置的10hz=100msloop_rate.sleep();}return 0;
}

3)编译代码

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

在这里插入图片描述
插入到CMakeLists.txt
在这里插入图片描述
add_executable含义:
描述将which程序文件编译成which可执行文件
src/velocity_publisher.cpp编译成velocity_publisher

target_link_libraries含义:
描述将可执行文件将ROS相关的库做链接

$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash //执行之前一定要设置环境变量
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher

设置环境变量
ctrl+h打开 .bashrc
最后一行加入
source /home/ubuntu/catkin_ws/devel/setup.bash

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

这篇关于古月居 ROS 21 讲3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/366354

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

ROS - C++实现RosBag包回放/提取

文章目录 1. 回放原理2. 回放/提取 多个话题3. 回放/提取数据包,并实时发布 1. 回放原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv,

ROS - C++实现RosBag包录制

文章目录 1. 录制原理2. 录制多个话题3. 订阅ROS消息,实时录制 1. 录制原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv, "reco

react笔记 8-21 约束性 表单

1、约束性组件和非约束性组件 非约束性组件<input type="text" name="" defaultValue={this.state.msg}></input>这里他的value是用户输入的值 并没有执行操作 只是获取到了msg的值 用户输入不会改变数据非约束性组件需要使用defaultValue获取数据 否则会报错约束性组件<input type="text

hector_quadrotor编译总结 | ubuntu 16.04 ros-kinetic版本

hector_quadrotor编译总结 | ubuntu 16.04 ros-kinetic版本 基于Ubuntu 16.04 LTS系统所用ROS版本为 Kinetic hector_quadrotor ROS包主要用于四旋翼无人机的建模、控制和仿真。 1.安装依赖库 所需系统及依赖库 Ubuntu 16.04|ros-kinetic|Gazebo|gazebo_ros_pkgs|ge

hector_quadrotor编译总结 | ubuntu 14.04 ros-indigo版本

hector_quadrotor编译总结 | ubuntu 14.04 ros-indigo版本 基于Ubuntu 14.04 LTS系统所用ROS版本为 Indigo hector_quadrotor ROS包主要用于四旋翼无人机的建模、控制和仿真。 备注:两种安装方式可选:install the binary packages | install the source files

Ubuntu20.04+ros-noetic配置Cartographer

一、概述         因为要配置激光SLAM,Cartographer属于激光雷达SLAM 中比较经典的一款,在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 (一)概述         使用平台是Windows的wsl2上的Ubuntu20.04子系统,双系统与虚拟机的安装原理与这个相同。主要依照的安装操作是官方文档,链接如下所示。 Runni

ROS学习记录-ubuntu系统和ROS的安装

一、ubuntu安装 使用的是ubuntu14.04.4系统,从官网下载,也可以从国内镜像下载。 官网:http://cdimage.ubuntu.com/netboot/14.04/?_ga=1.178505383.2009389272.1483453317 国内镜像 网易:http://mirrors.163.com/ubuntu-releases/14.04/ 厦大:http://

内存管理篇-21 虚拟内存管理:线性映射区

1.线性映射区的定义         这部分讲线性映射区的内容。一般老的嵌入式平台,它内存很小只有几百兆,都会直接把整个物理内存映射到线性映射区了,只有当物理内存大于1GB以上,线性映射区无法cover的时候就把剩下的放到高端内存。所以这个区域是最简单的。         线性映射区一般是指内核空间的某个部分,直接映射到低端内存的区域。并且他们之间是线性映射的。         PAGE_O