ROS基础

2023-05-16

 

一、ROS的核心概念

节点:

节点管理器:

话题:

消息:

服务:

参数:

二、 命令行工具的使用

命令行工具都是以ros开头的。

常用命令

  • rostopic
  • rosservice
  • rosnode
  • rosparam
  • rosmsg
  • rossrv

2.1 rostopic

2.2 rosservice

2.3 rosnode

2.4 rosrun

rosrun 包名 C++节点

三、创建工作空间与功能包

        所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下。因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包。

1. 创建工作空间

mkdir -p catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

2. 编译工作空间

cd ~/catkin_ws
catkin_make

3. 设置环境变量

source devel/setup.bash

4. 检查环境变量

echo $ROS_PACKAGE_PATH

 

5.创建功能包

cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp

注:功能包要放在src文件夹下,同一个工作空间不能有同名的功能包

创建功能包后,在功能包test_pkg文件夹下有src、include文件夹和package.xml、CMakeLists.txt文件

(1)src文件夹:放置代码文件
(2)include文件夹:放置头文件
(3)package.xml:与功能包相关的信息(如名字、版本号、许可证、作者信息、功能包的依赖信息等)
(4)CMakeLists.txt:描述功能包的编译规则
6.编译功能包

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

四、发布者的实现

主要步骤:

1.初始化ROS节点,并创建节点句柄;

    // ROS节点初始化
	ros::init(argc, argv, "velocity_publisher");
	// 创建节点句柄
	ros::NodeHandle n;


2.向ROS Master 注册节点信息,包括发布的话题名和话题中的消息类型;

// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10


ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);

3.创建消息数据;

 // 初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;


4.按照一定的频率循环发布消息

// 设置循环的频率
	ros::Rate loop_rate(10);
// 发布消息
	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();

整体如下:

//来自古月居21讲,自学做笔记用
/* 该例程将发布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,队列长度10
	ros::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;
}

 如何配置CMakeList.txt中的编译规则

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

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

add_executable(targetName source1 [source2 ...])

将创建一个可执行文件,它可以在CMake项目中被称为 targetName 。该名称可能包含字母、数字、下划线和连字符。构建项目时,将在构建目录中创建一个具有平台相关名称的可执行文件,默认名称基于目标名称。思考以下简单的命令示例:

source1 [source2 ...]:CPP文件

target_link_libraries(add_ex的可执行文件名   ${catkin_LIBRARIES})

添加头文件搜索路径: 在include_directories()添加所需要的头文件目录, 相当于编译过程中的 -I命令。
添加库文件搜索路径: 在link_directories()里添加所需要的库的目录,相当于编译过程中的 -L命令。
添加对库的链接:在target_link_libraries()里面添加需要添加的库的名称,相当于编译过程中的-l命令。
 

编译

$ cd ~/catkin_ws
$ catkin_make
$ roscore

运行

C++节点指的是可执行文件名,而不是cpp

cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点

source ~/工作空间/devel/setup.bash可以添加进.bashrc文件,使用上更方便

添加方式1: 直接使用 gedit 或 vi 编辑 .bashrc 文件,最后添加该内容

添加方式2:echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS基础 的相关文章

  • 双系统ubuntu20.04(neotic版本)从0实现Gazebo仿真slam建图

    双系统ubuntu20 04 neotic版本 从0实现Gazebo仿真slam建图 昨晚完成了ROS的多机通讯 还没来得及整理相关操作步骤 在进行实际小车的实验之前 还是先打算在仿真环境中进行测试 熟悉相关的操作步骤 计划通过虚拟机 笔记
  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • V-REP安装

    小知识 是当前目录 是父级目录 是根目录 1 下载V REP 官网地址 http www v rep eu downloads html 我用ubuntu16 04下载V REP PRO EDU V3 5 0 Linux tar 2 解压安
  • 关于相机与激光雷达数据采集与标定

    最近在做一个关于车路协同的项目 需要做一个路侧系统 传感器有摄像头和激光雷达 相机和激光雷达联合标定费了老半天劲 在此记录一下 雷达时间戳不对 导致摄像头和雷达的数据无法对齐 解决办法 修改雷达驱动发布点云消息时的时间戳 相机内参标定可以使
  • 1-如何安装ROS

    如何安装ROS 大家好 我是如何 今天尝试在Ubantu下安装ROS Robot Operating System 测试环境 虚拟机VMware Ubantu20 04 准备步骤 添加ROS软件源 sudo sh c echo deb ht
  • 线速度和角速度

    转自 https baike baidu com item E7 BA BF E9 80 9F E5 BA A6 1532652 fr aladdin https baike baidu com item E8 A7 92 E9 80 9F
  • Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS安装 ROS Kinetic只支持Wil
  • ROS 笔记(01)— Ubuntu 20.04 ROS 环境搭建

    ROS 官网 https www ros org ROS 中文官网 http wiki ros org cn 1 系统和 ROS 版本 不同的 ROS 版本所需的 ubuntu 版本不同 每一版 ROS 都有其对应版本的 Ubuntu 切记
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • 在 Python 3 中导入 Rosbag

    我正在尝试从 Python 3 读取 rosbag 文件 我安装了 ROS2 Eloquent Elusor 它应该支持 Python 3 当我跑步时 import rosbag bag rosbag Bag test bag 从Pytho
  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • 无法在 ROS 中使用本地安装的 Protocol Buffer

    我已经安装了协议缓冲区 https developers google com protocol buffers 本地 ROS包的目录结构如下 CMakeLists txt package xml include addressbook p
  • ROS安装错误(Ubuntu 16.04中的ROS Kinetic)

    中列出的步骤顺序http wiki ros org kinetic Installat 已被关注 尝试在Ubuntu 16 04中安装ROSkinetic 输入以下命令时出错 sudo apt get install ros kinetic
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告

随机推荐

  • day45 Promise实现一个分批请求

    要求 100个请求 每次5个 具体实现
  • 移动端软键盘和input遮挡问题

    零时解决方案 span class token doctype span class token punctuation lt span span class token doctype tag DOCTYPE span span clas
  • 如何获取 b站视频 纯播放

    通过视频页url直接拿到 BV1NV411v7Xp https www bilibili com video BV1NV411v7Xp spm id from 61 autoNext 发起请求 拿到 aid cid https api bi
  • vue3 ts vite 配置别名 导致报 无法找到对应莫模块的错误处理方式

    第一步 vite config ts alias span class token operator span span class token punctuation span span class token string 34 64
  • kl-waterfall 瀑布流

    文章目录 使用实现waterfall index文件kl waterfall item 使用 span class token operator lt span kl span class token operator span water
  • kl-anchor(vue锚点组件)

    文章目录 示例功能描述存在问题 使用实现 示例 功能描述 点击左侧导航栏 xff0c 右侧能滚动到指定的位置右侧滚动 xff0c 左侧能自动选中 存在问题 多次监听直接绑定滚动到了body 优化版本链接 使用 这儿是结合element ui
  • 银行家算法原理

    银行家算法原理
  • python 深度学习[数学基础-1-函数,极限]

    文章目录 函数 函数
  • python 深度学习-数学基础-2-导数

    z z的变化值比上距离的极限
  • python 深度学习-数学基础-3-微积分

  • rt-thread CAN通信(can dev write data failed!)解决,硬件定时器、以及CANfestival包的使用

    本文采用正点原子STM32f407ZGT6探索者 关于rtt的CAN通信配置可以参考RT Thread studio 添加CAN通信功能 按上面配置完成后串口会打印下图所示问题 xff1a xff08 can dev write data
  • (二)STM32串口总结(库函数版)

    一 STM32F103有两个串口 图中 TXD RXD 是相对 CH340G 来说的 xff0c 也就是 USB 串口的发送和接收引脚 而 USART1 RX 和 USART1 TX 则是相对于 STM32F103ZET6 来说的 也就是说
  • Matlab画图 线条的颜色、宽度等相关设置

    线条的属性有 xff1a Color 颜色 LineWidth 线条宽度 LineStyle 线型 LineJoin 线条边角的样式 AlignVertexCenters 锐化垂直线和水平线 线条属性的默认值为 0 0 0 39 39 39
  • 一、图像预处理

    四种图像的基本数据结构 xff1a Image 指Halcon的图像类型 Region 指图像中的一块区域 XLD 指图像中某一块区域的轮廓 Tuple 类似于数组 xff0c 用于存储一幅或多幅图像 内核矩阵的选择 xff1a 核越大越模
  • halcon边缘检测

    边缘检测 Ronny丶 博客园 寻找边缘的传统方法 xff0c 即图像中的暗 光转换 xff0c 是应用边缘滤波器 这些滤光器可以在光和暗区域的边界找到像素 从数学术语中来说 xff0c 这意味着这些滤波器决定了图像的梯度 此图像渐变通常作
  • ZED双目摄像头

    ZED stereol abs 配置踩过的坑 现在种树也不晚 博客园 介绍 xff1a CUDA CUDA 是 ZED SDK 使用的 NVIDIA 库 xff0c 用于在显卡上运行快速 AI 和计算机视觉任务 在 ZED SDK 安装过程
  • linux---五种高级IO模型

    阻塞IO模型非阻塞IO模型信号驱动IO模型异步IO模型多路转接IO模型高级IO重要概念 阻塞IO模型 在内核将数据准备好 xff0c 系统调用会一直等待 xff0c 所有的套接字默认都是阻塞IO方式 阻塞IO是最常见的IO模型 非阻塞IO模
  • Ubuntu错误处理集

    1 W GPG 错误 xff1a https developer download nvidia com compute cuda repos ubuntu1604 x86 64 Release 由于没有公钥 xff0c 无法验证下列签名
  • Linux下配置虚拟CAN

    1 加载vcan模块 sudo modprobe vcan 2 添加vcan0网卡 sudo ip link add dev vcan0 type vcan 3 查看当前CAN网络 ifconfig a 4 开启vcan0 sudo ip
  • ROS基础

    一 ROS的核心概念 节点 xff1a 节点管理器 xff1a 话题 xff1a 消息 xff1a 服务 xff1a 参数 xff1a 二 命令行工具的使用 命令行工具都是以ros开头的 常用命令 rostopicrosserviceros