《ROS2 机器人开发 从入门道实践》 鱼香ROS2——第5章内容

目录

第5章 ROS常用开发工具

5.1 坐标变换工具介绍

5.1.1 通过命令行使用TF

5.1.2 对TF原理的简单探究

5.2 Python中的手眼坐标变换

5.2.1 通过Python发布静态TF

5.2.2 通过Python发布动态TF

5.2.3 通过Python查询TF关系

5.3 C++中的地图坐标系变化

5.3.1 通过C++发布静态TF

5.3.2 通过C++发布动态TF

5.3.3 通过C++查询TF关系

5.4 常用可视化工具rqt与RViz

5.4.1 GUI框架rqt

5.4.2 数据可视化工具RViz

5.5 数据记录工具ros2 bag

5.6 ROS2基础之Git进阶

5.6.1 查看修改内容

5.6.2 学会撤销代码

5.6.3 进阶掌握Git分支


第5章 ROS常用开发工具

5.1 坐标变换工具介绍

5.1.1 通过命令行使用TF

1. 新打开一个终端,建立base_link到base_laser的坐标关系

ros2 run tf2_ros static_transform_publisher --x 0.1 --y 0.0 --z 0.2 --roll 0.0 --pitch 0.0 --yaw 0.0 --frame-id base_link --child-frame-id base_laser

2. 新打开一个终端,建立base_laser到wall_point的坐标关系

ros2 run tf2_ros static_transform_publisher --x 0.1 --y 0.0 --z 0.2 --roll 0.0 --pitch 0.0 --yaw 0.0 --frame-id base_laser --child-frame-id wall_point

3. 新打开一个终端,查询base_link到wall_point的坐标关系,会一直运行这个查询程序

ros2 run tf2_ros tf2_echo base_link wall_point

4. 安装3D旋转可视化

sudo apt install ros-humble-mrpt2 -y 无法定位软件包Unable to locate package ros-humble-mrpt2

使用 sudo apt install mrpt-apps 可以安装成功

5. 打开3d旋转可视化窗口

3d-rotation-converter

6. 查看TF树,导出至PDF文件中,需要同时运行1和2步的两个终端指令

ros2 run tf2_tools view_frames

5.1.2 对TF原理的简单探究

1. ros2 topic list查看话题

/parameter_events
/rosout
/tf_static

2. 查看话题tf_static,ros2 topic info /tf_static

Type: tf2_msgs/msg/TFMessage
Publisher count: 2
Subscription count: 0

3. 查看消息接口的定义,ros2 interface show tf2_msgs/msg/TFMessage

geometry_msgs/TransformStamped[] transforms
    #
    #
    std_msgs/Header header 成员变量
        builtin_interfaces/Time stamp 时间戳
            int32 sec
            uint32 nanosec
        string frame_id 父坐标系名字
    string child_frame_id 子坐标系名字
    Transform transform
        Vector3 translation
            float64 x
            float64 y
            float64 z
        Quaternion rotation
            float64 x 0
            float64 y 0
            float64 z 0
            float64 w 1

4. 订阅话题,ros2 topic echo /tf_static,显示话题内容

tf_static是静态坐标发布,tf是动态坐标发布

5.2 Python中的手眼坐标变换

5.2.1 通过Python发布静态TF

1. 安装两个库

sudo apt install ros-$ROS_DISTRO-tf-transformations

2.创建新的文件夹chapt5/chapt5_ws/src,在src下创建功能包

ros2 pkg create --build-type ament_python --dependencies rclpy geometry_msgs tf_ros tf_transformations --license Apache-2.0 demo_python_tf

3. 新建文件chapt5/chapt5_ws/src/demo_python_tf/demo_python_tf/static_tf_broadcast.py

import rclpy
from rclpy.node import Node
# 静态坐标发布器
from tf2_ros import StaticTransformBroadcaster
# 消息接口
from geometry_msgs.msg import TransformStamped
# 欧拉角转四元数
from tf_transformations import quaternion_from_euler
# 用于将角度转弧度
import math

class StaticTFBroadcaster(Node):
    def __init__(self):
        super().__init__('static_tf_broadcaster')
        # 创建一个坐标发布器对象
        self.static_broadcaster_ = StaticTransformBroadcaster(self)
        self.publish_static_tf()

    # 发布静态TF 从base_link到camera_link的坐标关系
    def publish_static_tf(self):
        # 创建一个消息接口对象
        transform = TransformStamped()
        # 对消息接口transform进行成员赋值
        # 父坐标系名称
        transform.header.frame_id = 'base_link'
        # 子坐标系名称
        transform.child_frame_id = 'camera_link'
        # 时间
        transform.header.stamp = self.get_clock().now().to_msg()
        
        # 坐标关系
        transform.transform.translation.x = 0.5
        transform.transform.translation.y = 0.3
        transform.transform.translation.z = 0.6
        # 角度换算,欧拉角转四元数,返回一个元组q = x,y,z,w
        q = quaternion_from_euler(math.radians(180),0,0)
        transform.transform.rotation.x = q[0]
        transform.transform.rotation.y = q[1]
        transform.transform.rotation.z = q[2]
        transform.transform.rotation.w = q[3]

        # 发布静态坐标关系
        self.static_broadcaster_.sendTransform(transform)
        self.get_logger().info(f'发布静态坐标:{transform}')

def main():
    rclpy.init()
    node = StaticTFBroadcaster()
    rclpy.spin(node)
    rclpy.shutdown()

4. 修改setup.py

    entry_points={
        'console_scripts': [
            'static_tf_broadcast = demo_python_tf
<think>好的,我需要帮助用户找到ROS2入门21讲的课件,特别是涉及鱼香肉丝相关的教学案例。首先,我需要分析用户提供的现有信息。用户提到引用[1]是关于ROS2开发的学习笔记,其中案例二涉及机器视觉识别的发布者和订阅者命令。用户现在想找的是第21讲,主题可能与鱼香肉丝有关,可能是一个教学示例。 首先,我需要考虑ROS2课程的结构。通常,ROS2入门教程会涵盖基础概念如节点、话题、服务、动作等,以及实际应用案例。用户提到的第21讲可能属于进阶内容,结合具体案例教学,比如食品识别或类似的趣味项目,可能用“鱼香肉丝”作为例子来讲解某个功能,比如图像处理、消息传递或机器学习集成。 接下来,我需要验证是否存在这样的课件。由于用户提供的引用[1]来自内部资料,可能是一个自定义的教程系列,而“鱼香肉丝”可能是一个幽默或特定的案例名称。由于公开的ROS2官方教程(如ROS2 Humble或Foxy的官方文档)通常不会使用这样的案例名称,这可能是一个用户自定义或第三方教程的内容。 因此,用户可能需要检查他们正在跟随的教程来源。可能的途径包括: 1. 课程提供者的官方网站或学习平台,查看课程目录和讲义。 2. 联系课程讲师或查看课程资料中的联系方式,直接询问第21讲的内容。 3. 在ROS2社区论坛或相关群组中询问,是否有其他学员有该讲义的资料。 4. 检查课程配套的GitHub仓库,通常课件和示例代码会托管在那里。 此外,用户可能混淆了主题名称,比如“鱼香”可能是某个功能包或项目的名称,而“肉丝”是其中的一个示例。需要进一步明确关键词的正确性。如果找不到确切资料,建议用户提供更多上下文或重新确认讲题名称,以便更精准地定位资源。 最后,考虑到用户可能无法访问特定内部资源,建议他们查阅ROS2官方文档或推荐的学习资源,如《ROS2机器人编程实战》等书籍,以补充相关知识。</think>### 关于ROS2入门21讲“鱼香肉丝”教学案例的解答 根据您提供的信息,目前公开的ROS2官方教程中未发现以“鱼香肉丝”为主题的教学案例。推测该案例可能是特定课程或自定义实验中的趣味项目,以下提供解决思路: --- #### **步骤1:确认课程来源** - 若您参考的是机构/教师自编课程(如引用[1]中的`learning_topic`示例),建议: 1. 检查课程配套的GitHub仓库(通常课件和代码会托管在此) 2. 联系课程提供方获取第21讲课件 3. 在课程论坛或社群中询问其他学员 --- #### **步骤2ROS2案例扩展思路** 若想实现类似“鱼香肉丝”的趣味案例,可通过以下ROS2核心功能实现: 1. **话题通信**:模拟食材传递 ```python # 发布者(厨师节点) ros2 run food_demo ingredient_publisher --ingredient "鱼香肉丝配料" # 订阅者(炒锅节点) ros2 run food_demo cooking_subscriber ``` 2. **服务通信**:实现调味请求 ```python # 服务端(调味台) ros2 service call /add_sauce food_interfaces/srv/Sauce "{type: '鱼香酱'}" ``` 3. **OpenCV图像识别**:菜品视觉检测(类似引用[1]的摄像头案例)[^1] --- #### **步骤3:替代学习资源推荐** 若无法获取原课件,可参考以下ROS2核心教程: 1. **官方文档**: - [话题与服务基础](https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries.html) - [使用OpenCV进行图像处理](https://index.ros.org/p/cv_bridge/) 2. **图书资源**: 《ROS2机器人开发实战》第8“机器视觉案例” --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值