古月《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 页请下载阅读 -
文档评分