28、ROS2坐标变换TF2案例

 

1、案例介绍

上节课程中讲解了系统提供的小海龟跟随案例中的TF关系,这节课我们自己实现该功能。

 

2、源代码路径

完整的代码请查看docker内如下路径:

 

3、原理解析

image-20220528143750881

在两只海龟的仿真器中,我们可以定义三个坐标系,比如仿真器的全局参考系叫做world,turtle1和turtle2坐标系在两只海龟的中心点,这样,turtle1和world坐标系的相对位置,就可以表示海龟1的位置,海龟2也同理。

要实现海龟2向海龟1运动,我们在两者中间做一个连线,再加一个箭头,怎么样,是不是有想起高中时学习的向量计算?我们说坐标变换的描述方法就是向量,所以在这个跟随例程中,用TF就可以很好的解决。

向量的长度表示距离,方向表示角度,有了距离和角度,我们随便设置一个时间,不就可以计算得到速度了么,然后就是速度话题的封装和发布,海龟2也就可以动起来了。

所以这个例程的核心就是通过坐标系实现向量的计算,两只海龟还会不断运动,这个向量也得按照某一个周期计算,这就得用上TF的动态广播与监听了。

 

4、新建功能包

1、docker内执行如下命令:

执行完上述命令,会创建pkg_tf功能包,同时会创建一个turtle_tf_broadcaster的节点,并且已经配置好相关的配置文件,在【turtle_tf_broadcaster.py】文件中添加如下代码:

 

2、接下来在turtle_tf_broadcaster.py同级目录下新建【turtle_following.py】文件,添加如下代码:

image-20231101091940771

 

3、在pkg_tf功能包下新建launch文件夹,在launch文件夹内新建【turtle_following.launch.py】文件,添加如下内容:

 

5、编辑配置文件

5.1、setup.py中配置

image-20231101095023500

5.2、package.xml中配置

image-20231101100034665

 

6、编译工作空间

 

7、运行程序

确保docker已经开启了GUI显示,然后docker内开启一个终端,执行:

运行后在muto的宿主机vnc上可以看到:生成了两支小乌龟,并且其中一只向另一只靠拢

image-20231101095358293

docker内开启另一个终端,执行:

image-20231101095746813

在此终端内按键盘的上下左右键可以控制其中的一个小乌龟运动,然后另外一个小乌龟会跟着运动直到它们重合。