《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 =
### 关于ROS 2机器人开发入门实践学习资源 对于希望深理解和掌握ROS 2机器人开发的人来说,《ROS2 机器人开发入门实践》是一本非常有价值的书籍,特别是其中鱼香ROS2——第2、3内容提供了丰富的理论基础和实际操作指导[^5]。 #### 获取官方文档和支持材料 除了上述书籍外,官方文档始终是最权威的信息来源之一。通过访问ROS官方网站可以获取最新的API说明和技术支持。此外,参与社区论坛交流也是解决问题的有效途径。 #### 利用手册与在线课程 许多开发者分享了自己的经验总结成的手册或是录制成了视频教程发布在网络上。例如,“ROS机器人开发实践资料下载”的项目地址提供了一系列实用工具包以及案例研究供初学者参考[^1]。 #### 学习创建简单的Python/C++节点 为了更好地理解如何构建基于ROS的应用程序,可以从编写基本的消息传递逻辑开始练习。下面是一个简单的Python版本示例: ```python import rclpy from rclpy.node import Node def main(): # 初始化并分配资源给新启动的进程 rclpy.init() # 创建名为'python_node'的新实例对象 node = Node('python_node') # 输出调试信息至控制台 node.get_logger().info('你好 python_node') # 设置警告级别日志记录 node.get_logger().warn('你好 python_node') try: # 进循环等待事件触发直到手动终止程序 rclpy.spin(node) finally: # 清理工作完成后关闭连接 rclpy.shutdown() if __name__ == '__main__': main() ``` 同样地,在C++环境下也可以实现相似功能,具体配置方法如下所示: ```cmake # CMakeLists.txt 文件中的部分内容展示 cmake_minimum_required(VERSION 3.8) project(ros2_node) find_package(rclcpp REQUIRED) add_executable(ros2_node src/ros2_cpp_node.cpp) target_include_directories( ros2_node PRIVATE ${rclcpp_INCLUDE_DIRS} ) target_link_libraries( ros2_node PRIVATE ${rclcpp_LIBRARIES} ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值