ROS2 入门控制命令(以海龟为例)和工作空间介绍

news2024/11/13 10:54:49

目录

  • 前言
    • 1 打开海龟显示窗口
    • 2 启用键盘控制窗口
    • 3 海龟按圆形轨迹运动(圆周运动)
    • 4 产生新的海龟
    • 5 记录并播放海龟运动轨迹
      • ros2 bag 功能
      • 5.1 记录
      • 5.2 播放
  • ROS的工作空间
    • 6 创建功能包
    • 7 编译功能包

前言

命令方向特别注意空格,冒号后面加空格要形成习惯,否则经常报错。

1 打开海龟显示窗口

ros2 run turtlesim  turtlesim_node

终端输出显示

xucg@xucg-vm17:~$ ros2 run turtlesim  turtlesim_node 
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[INFO] [1724157403.864968580] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [1724157403.871132454] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
[INFO] [1724158102.333855707] [turtlesim]: Spawning turtle [None] at x=[2.000000], y=[2.000000], theta=[0.200000]
[INFO] [1724159274.673713108] [turtlesim]: Spawning turtle [abc] at x=[2.000000], y=[2.000000], theta=[0.200000]
[WARN] [1724160334.641159560] [turtlesim]: Oh no! I hit the wall! (Clamping from [x=11.112075, y=4.070568])
[WARN] [1724160334.656553546] [turtlesim]: Oh no! I hit the wall! (Clamping from [x=11.115834, y=4.053306])
[WARN] [1724160334.686513557] [turtlesim]: Oh no! I hit the wall! (Clamping from [x=11.115834, y=4.036043])

2 启用键盘控制窗口

ros2 run turtlesim  turtle_teleop_key

终端输出显示

xucg@xucg-vm17:~$ ros2 run turtlesim  turtle_teleop_key 
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
'Q' to quit.

3 海龟按圆形轨迹运动(圆周运动)

控制速度:x轴线性速度是2,z轴角速度是1.8

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.8}}"

终端输出显示

xucg@xucg-vm17:~$ ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.8}}"
publisher: beginning loop
publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))

publishing #2: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))

publishing #3: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))

4 产生新的海龟

新海龟出现的位置为 【x=2, y=2, theta=0.2】,名称为abc,不设置的话默认为None,后续不好控制

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: 'abc'}"

终端显示输出

xucg@xucg-vm17:~$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: 'abc'}"
waiting for service to become available...
requester: making request: turtlesim.srv.Spawn_Request(x=2.0, y=2.0, theta=0.2, name='abc')

response:
turtlesim.srv.Spawn_Response(name='abc')

要想控制新海龟圆周运动的话,替换 turtle1 为 abc 即可

ros2 topic pub --rate 1 /abc/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.8}}"

在这里插入图片描述

5 记录并播放海龟运动轨迹

ros2 bag 功能

xucg@xucg-vm17:~$ ros2 bag 
usage: ros2 bag [-h] Call `ros2 bag <command> -h` for more detailed usage. ...

Various rosbag related sub-commands

options:
  -h, --help            show this help message and exit

Commands:
  convert  Given an input bag, write out a new bag with different settings
  info     Print information about a bag to the screen
  list     Print information about available plugins to the screen
  play     Play back ROS data from a bag
  record   Record ROS data to a bag
  reindex  Reconstruct metadata file for a bag

  Call `ros2 bag <command> -h` for more detailed usage.
xucg@xucg-vm17:~$ 

5.1 记录

ros2 bag record /turtle1/cmd_vel

5.2 播放

ros2 bag play rosbag2_2024_08_20-21_24_51/

终端输出显示

xucg@xucg-vm17:~ros2 bag record /turtle1/cmd_vel
[INFO] [1724160291.225165509] [rosbag2_recorder]: Press SPACE for pausing/resuming
[INFO] [1724160291.233668900] [rosbag2_storage]: Opened database 'rosbag2_2024_08_20-21_24_51/rosbag2_2024_08_20-21_24_51_0.db3' for READ_WRITE.
[INFO] [1724160291.240964579] [rosbag2_recorder]: Listening for topics...
[INFO] [1724160291.244260951] [rosbag2_recorder]: Subscribed to topic '/turtle1/cmd_vel'
[INFO] [1724160291.244561104] [rosbag2_recorder]: Recording...
[INFO] [1724160291.244647035] [rosbag2_recorder]: Event publisher thread: Starting
[INFO] [1724160291.245010608] [rosbag2_recorder]: All requested topics are subscribed. Stopping discovery...
[INFO] [1724160355.010195474] [rosbag2_cpp]: Writing remaining messages from cache to the bag. It may take a while
[INFO] [1724160355.010820387] [rosbag2_recorder]: Event publisher thread: Exiting
[INFO] [1724160355.011024280] [rosbag2_recorder]: Recording stopped

终端输出显示

xucg@xucg-vm17:~$ ros2 bag play rosbag2_2024_08_20-21_24_51/
[INFO] [1724160393.303341777] [rosbag2_storage]: Opened database 'rosbag2_2024_08_20-21_24_51/rosbag2_2024_08_20-21_24_51_0.db3' for READ_ONLY.
[INFO] [1724160393.303512838] [rosbag2_player]: Set rate to 1
[INFO] [1724160393.311010661] [rosbag2_player]: Adding keyboard callbacks.
[INFO] [1724160393.311181251] [rosbag2_player]: Press SPACE for Pause/Resume
[INFO] [1724160393.311263406] [rosbag2_player]: Press CURSOR_RIGHT for Play Next Message
[INFO] [1724160393.311321585] [rosbag2_player]: Press CURSOR_UP for Increase Rate 10%
[INFO] [1724160393.311378451] [rosbag2_player]: Press CURSOR_DOWN for Decrease Rate 10%
[INFO] [1724160393.312217527] [rosbag2_storage]: Opened database 'rosbag2_2024_08_20-21_24_51/rosbag2_2024_08_20-21_24_51_0.db3' for READ_ONLY.

ROS的工作空间

空间名称 dev_ws 随意更改,src、install、build、log 严格遵循

在这里插入图片描述

# 安装git包
sudo apt install git
# 创建工程文件夹,src存代码
mkdir -p ~/dev_ws/src
# 克隆教程代码
git clone https://gitee.com/guyuehome/ros2_21_tutorials.git
# 把代码移动到工程目录下
mv ros2_21_tutorials/ dev_ws/src
# 安装pip(python包管理工具)
sudo apt install python3-pip
# 安装ros依赖包(国内重开发,解决网络链接问题)
sudo pip install rosdepc
# 更新rosdepc环境和初始化
sudo rosdepc init && rosdepc update
# 检查代码依赖项(搜索src目录下所有包并检查依赖项,是否符合humble版本,否则更新)
rosdepc install -i --from-path src --rosdistro humble -y
# 下载编译器colcon
sudo apt install python3-colcon-ros
# 回到工作主目录
cd ~/dev_ws
# 编译工作空间
colcon build
# 把工作目录作为根目录,方便匹配环境变量,只影响当前终端
source install/local_setup.sh

把该命令复制到./bashrc文件中,新的根目录才可以在任意终端生效,方便后续代码运行
./bashrc文件在home目录下,属于隐藏显示,可以键盘按 Ctrl+H 进行显示查看。

source ~/dev_ws/install/local_setup.sh

6 创建功能包

功能包可以解耦代码间的依赖性,方便代码分享和互相协作

【命令范式】ros2 pkg create --build-type <build-type> <package_name>

cd ~/dev_ws/src 
# C++
ros2 pkg create --build-type ament_cmake learning_pkg_c
# Python 区别主要在ament_x
ros2 pkg create --build-type ament_python learning_pkg_python

CMakeLists.txt 编译的规则和过程顺序
package.xml 描述功能包基本信息(名称、版本、开发人人、许可证),环境依赖

setup.cfg
setup.py 功能包基本信息和程序起点描述(entry_points)

在这里插入图片描述

7 编译功能包

cd ~/dev_ws/src
# 重编译
colcon build
source install/local setup.bash

把src代码重编译到install目录下,才可以使用ros2 run命令进行终端运行。

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

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

相关文章

力扣 | 子数组滑动窗口 | 560. 和为 K 的子数组、209. 长度最小的子数组、862. 和至少为 K的最短子数组、220. 存在重复元素 III

文章目录 一、非滑动窗口1.1 560/LCR 010. 和为 K 的子数组1.2 862. 和至少为 K 的最短子数组 二、滑动窗口2.1 209/LCR 008. 长度最小的子数组2.2 220. 存在重复元素 III 下面的题并不是全都由滑动窗口解决&#xff0c;有的题可以&#xff0c;有的题不可以&#xff0c;放入滑动…

《黑神话:悟空》Steam峰值超200万 国内玩家占9成

《黑神话&#xff1a;悟空》自今天白天上午10点解锁以来&#xff0c;Steam在线峰值不断创新高&#xff0c;白天创下的140万记录又被晚上超过。据SteamDB统计&#xff0c;随着更多“打工人”回家休息&#xff0c;《黑神话&#xff1a;悟空》Steam同时在线已经突破了200万&#x…

编程之旅:从挫折到突破的心路历程

你是如何克服编程学习中的挫折感的&#xff1f; 编程学习之路上&#xff0c;挫折感就像一道道难以逾越的高墙&#xff0c;让许多人望而却步。然而&#xff0c;真正的编程高手都曾在这条路上跌倒过、迷茫过&#xff0c;却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的…

软件产品测试报告内容简析,第三方软件测试公司测试服务分享

在数字化快速发展的今天&#xff0c;软件产品的质量直接影响着企业的竞争力与市场表现&#xff0c;软件产品测试报告作为整个测试过程的总结性文档至关重要。 一、软件产品测试报告   软件产品测试报告是测试团队对软件系统的质量评估和诊断的重要文件&#xff0c;它包含了对…

LabVIEW滚动轴承故障诊断系统

滚动轴承是多种机械设备中的关键组件&#xff0c;其性能直接影响整个机械系统的稳定性和安全性。由于轴承在运行过程中可能会遇到多种复杂的工作条件和环境因素影响&#xff0c;这就需要一种高效、准确的故障诊断方法来确保机械系统的可靠运行。利用LabVIEW开发的故障诊断系统&…

VMwareWorkstation安装ESXi 7.0U3系统详细教程

版本信息 VMwareWorkstation版本如下&#xff1a; ESXI系统镜像版本如下&#xff1a; 安装步骤 ESXi虚拟机硬件配置 选择创建新的虚拟机 选择自定义&#xff0c;点击下一步 选择ESXi 7.0&#xff0c;点击下一步 选择稍后安装操作系统&#xff0c;点击下一步 按照图下所示选择…

十个方面100个网络安全相关知识点,快来学习!(上)

网络安全风险无处不在&#xff0c;现梳理了100个网络安全相关的小知识&#xff0c;希望能进一步提升大家的安全意识&#xff0c;帮助大家建立更加安全的网络环境。 一、账号密码安全 1. 如果有初始密码&#xff0c;应尽快修改。 2. 密码长度不少于8个字符。 3. 不要使用单一…

从零开始的nginx学习世界

一&#xff1a;nginx概述 1.1 nginx是什么 1&#xff1a;Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点&#xff08;俄文&#xff1a;Рамблер&…

Linux ubuntu 24.04 运行《文明5》游戏,解决游戏中文设置的问题!

Linux ubuntu 24.04 运行《文明5》游戏&#xff0c;解决游戏中文设置的问题&#xff01; 《文明5》是一款回合制经营策略游戏&#xff0c;拼的就是科技发展速度&#xff0c;点的是科技树&#xff0c;抢的就是科技制高点&#xff0c;但是真的是时间漫长&#xff0c;可能需要好几…

解密高可靠分布式锁:优化策略与技术实现指南

随着系统架构逐渐从单机走向分布式&#xff0c;如何在分布式环境下保证线程同步执行成为一个不可忽视的问题。分布式锁作为解决这一问题的关键技术&#xff0c;为分布式系统中的资源共享和任务协调提供了重要支持。选择合适的分布式锁实现方式&#xff0c;可以有效提高系统的可…

重塑“上海我店模式”的创新生态与绿色消费浪潮

在数字经济的浪潮中&#xff0c;一个名为“上海我店模式”的平台迅速崛起&#xff0c;短短三年内便实现了流水破百亿的壮举。该平台巧妙地将绿色消费积分机制融入本地生活与异业联盟商圈&#xff0c;不仅激活了庞大的私域流量&#xff0c;更以其独特的商业模式引领了消费新风尚…

hyper-v ubuntu下连接嵌入式linux板卡

用hyper-v非常的方便&#xff0c;不用装vm也不会那么臃肿&#xff0c;但如何在hyper-v和嵌入式板卡之间进行通讯呢&#xff1f; 1.环境 采用的是100ask-imx6ull板卡&#xff0c;hyper-v装的是ubuntu22系统。 hyper-v根据文章hyper-v上外网已经配置了一个虚拟网卡。 2.物理连…

vue2 proxy 代理配置报错 ValidationError: webpack Dev Server Invalid Options

vue/cli3&#xff08;本文实际使用的是vue/cli4&#xff09;代理配置如下&#xff1a; vue/cli4使用vue/cli3的代理配置会出现异常&#xff0c;本文解决办法为解决方法二处理&#xff0c;运行正常。 vue 启动项目 yarn serve 或者 npm run dev 或者 npm run serve 时&#x…

and design vue表格列宽度拖拽,vue-draggable-resizable插件使用

and design vue2版的table表格不能拖拽列的宽度&#xff0c;通过vue-draggable-resizable插件实现 我用的是and design 1.7.8的版本&#xff0c;先下插件 yarn add vue-draggable-resizable2.1.0我这版本的and design用最新3.0.0以上的插件会有问题&#xff0c;实现不了效果&a…

EmguCV学习笔记 VB.Net 5.3 透视变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

微分方程(Blanchard Differential Equations 4th)中文版Section2.2

动力系统的几何分析 捕食者-猎物系统的向量场 在第2.1节中&#xff0c;我们展示了两个不同捕食者-猎物系统的 R ( t ) R(t) R(t) 和 F ( t ) F(t) F(t) 图形&#xff0c;但没有描述我们是如何生成这些图形的。我们将在第2.5节中解决这个问题&#xff0c;采用欧拉方法推广到…

Java | Leetcode Java题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {private class Node {// 哈希表存储关注人的 IdSet<Integer> followee;// 用链表存储 tweetIdLinkedList<Integer> tweet;Node() {followee new HashSet<Integer>();tweet new LinkedList<Integer&g…

《深入浅出WPF》读书笔记.6binding系统(上)

《深入浅出WPF》读书笔记.6binding系统(上) 背景 这一章是核心内容。databinding可以理解为实现逻辑层和展示层的桥梁。 binding基础 如何理解binding <Window x:Class"BindingSysDemo.BindingSysDemo1"xmlns"http://schemas.microsoft.com/winfx/2006/…

【pyqt5】QLineEdit中的文本输入限制方式,输入校验规则的应用详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

从0到1学会nginx分布式框架

nginx 项目地址晓智科技晓智科技晓智文档晓智文档源码地址源码地址文档源码文档源码 yum 安装 nginx 安装 yum-utils sudo yum install -y yum-utils添加 yum 源文件 # 新建文件 vim /etc/yum.repos.d/nginx.repo # 添加文件源 [nginx-stable] namenginx stable repo ba…