pdf文档 古月《ROS入门21讲》18.tf坐标系广播与监听的编程实现.pdf

1.19 MB 8 页 0 评论
语言 格式 评分
中文(简体)
.pdf
3
摘要
文档详细介绍了在ROS中实现tf坐标系的广播与监听的编程方法,包括创建功能包、编写广播器和监听器代码的Python和C++实现,以及配置CMakeLists.txt以便编译代码。文档还提供了运行示例,展示了如何在turtlesim环境中运行tf广播器和监听器节点,用于实现海龟之间的坐标变换与控制。
AI总结
以下是文档内容的总结: --- ### 《ROS入门21讲》18.tf坐标系广播与监听的编程实现 #### 功能包的创建 1. 创建功能包: ```bash cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp rospy turtlesim ``` 功能包包含主文件夹 `learning_tf` 和相关配置文件(如 `src`、`CMakeLists.txt`、`package.xml`)。 2. 功能包依赖的核心包包括 `roscpp`、`rospy` 和 `turtlesim`。 --- #### tf广播器与监听器代码实现 #### 1. Python实现 ##### (1) 广播器代码(`turtle_tf_broadcaster.py`) - 定义 `tf.TransformBroadcaster` 实例,广播 `turtle` 的位姿信息。 - 订阅 `/turtle/pose` 主题,回调函数 `handle_turtle_pose` 将位姿数据转换为坐标变换并发布。 - 使用 `sendTransform` 方法广播坐标变换: ```python br.sendTransform((x, y, 0), quaternion_from_euler(0, 0, theta), rospy.Time.now(), turtle_name, "world") ``` ##### (2) 监听器代码(`turtle_tf_listener.py`) - 定义 `tf.TransformListener` 实例,监听 `turtle2` 的速度指令并控制 `turtle1`。 - 请求 `/spawn` 服务,生成 `turtle2`。 - 发布 `turtle2` 的速度控制指令,计算与 `turtle1` 之间的距离和角度: ```python angular = 4 * math.atan2(trans.transform.translation.y, trans.transform.translation.x) linear = 9.5 * math.sqrt(trans.transform.translation.x**2 + trans.transform.translation.y**2) ``` --- #### 2. C++实现 ##### (1) 广播器代码 - 初始化 `tf::TransformBroadcaster`,广播 `world` 与 `turtle` 坐标系之间的变换。 - 通过 `sendTransform` 方法发布变换数据: ```cpp br.sendTransform(ros::Time::now(), "world", turtle_name, transform); ``` ##### (2) 监听器代码 - 使用 `tf::TransformListener` 查找 `turtle1` 与 `turtle2` 之间的坐标变换。 - 根据变换数据计算 `turtle2` 的速度指令,发布至 `/turtle2/cmd_vel` 主题。 --- #### CMakeLists.txt 配置 1. 设置需要编译的代码和生成的可执行文件: ```cmake add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp) target_link_libraries(turtle_tf_broadcaster ${catkin_LIBRARIES}) add_executable(turtle_tf_listener src/turtle_tf_listener.cpp) target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES}) ``` --- #### 运行步骤 1. 编译代码: ```bash cd ~/catkin_ws catkin_make source devel/setup.bash ``` 2.启动 ROS 节点: ```bash roscore rosrun turtlesim turtlesim_node rosrun learning_tf turtle_tf_broadcaster _name:=turtle1_tf_broadcaster /turtle1 rosrun learning_tf turtle_tf_broadcaster _name:=turtle2_tf_broadcaster /turtle2 rosrun learning_tf turtle_tf_listener rosrun turtlesim turtle_teleop_key ``` --- #### 运行效果 - `turtle_tf_broadcaster` 节点广播 `turtle1` 和 `turtle2` 的坐标变换。 - `turtle_tf_listener` 节点监听坐标变换,计算 `turtle2` 的速度指令,并控制其运动。 - `turtle_teleop_key` 节点用于手动控制 `turtle1` 的运动。 --- 以上为文档内容的核心要点总结,涵盖了 tf 坐标系的广播与监听实现、代码逻辑、CMake 配置和运行步骤。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 1 页请下载阅读 -
文档评分
请文明评论,理性发言.