5.4 坐標變換監(jiān)聽
5.4 坐標變換監(jiān)聽
監(jiān)聽可以實現(xiàn)坐標點在不同坐標系之間的變換,或者不同坐標系之間的變換。當然,前提是必須要廣播不同坐標系關(guān)系,而至于是靜態(tài)廣播或動態(tài)廣播則無要求。
5.4.1 坐標系變換案例以及分析
1.案例需求
案例1:在5.3 坐標變換廣播中發(fā)布了laser相對于base_link和camra相對于base_link的坐標系關(guān)系,請求解laser相對于camera的坐標系關(guān)系。

案例2:在5.3 坐標變換廣播中發(fā)布了laser相對于base_link的坐標系關(guān)系且發(fā)布了laser坐標系下的障礙物的坐標點數(shù)據(jù),請求解base_link坐標系下該障礙物的坐標。

2.案例分析
在上述案例中,案例1是多坐標系的場景下實現(xiàn)不同坐標系之間的變換,案例2則是要實現(xiàn)同一坐標點在不同坐標系下的變換,雖然需求不同,但是相關(guān)算法都被封裝好了,我們只需要調(diào)用相關(guān) API 即可。
3.流程簡介
兩個案例的實現(xiàn)流程類似,主要步驟如下:
編寫坐標變換程序?qū)崿F(xiàn);
編輯配置文件;
編譯;
執(zhí)行。
案例我們會采用 C++ 和 Python 分別實現(xiàn),二者都遵循上述實現(xiàn)流程。
4.準備工作
終端下進入工作空間的src目錄,調(diào)用如下兩條命令分別創(chuàng)建C++功能包和Python功能包。
ros2 pkg create cpp04_tf_listener --build-type ament_cmake --dependencies rclcpp tf2 tf2_ros geometry_msgs?
ros2 pkg create py04_tf_listener --build-type ament_python --dependencies rclpy tf_transformations tf2_ros geometry_msgs
5.4.2 坐標系變換(C++)
1.坐標系變換實現(xiàn)
功能包 cpp04_tf_listener 的 src 目錄下,新建 C++ 文件 demo01_tf_listener.cpp,并編輯文件,輸入如下內(nèi)容:

在創(chuàng)建功能包時,所依賴的功能包已經(jīng)自動配置了,配置內(nèi)容如下:

2.CMakeLists.txt
CMakeLists.txt 中發(fā)布和訂閱程序核心配置如下:

3.編譯
終端中進入當前工作空間,編譯功能包:

4.執(zhí)行
當前工作空間下,啟動三個終端,終端1輸入如下命令發(fā)布雷達(laser)相對于底盤(base_link)的靜態(tài)坐標變換:

5.4.3 坐標系變換(Python)
1.坐標系變換實現(xiàn)
功能包 py04_tf_listener 的 py04_tf_listener 目錄下,新建 Python 文件 demo01_tf_listener_py.py,并編輯文件,輸入如下內(nèi)容:

2.編輯配置文件
1.package.xml
在創(chuàng)建功能包時,所依賴的功能包已經(jīng)自動配置了,配置內(nèi)容如下:

2.setup.py
entry_points
字段的console_scripts
中添加如下內(nèi)容:

3.編譯
終端中進入當前工作空間,編譯功能包:

4.執(zhí)行
當前工作空間下,啟動兩個終端,終端1輸入如下命令發(fā)布雷達(laser)相對于底盤(base_link)的靜態(tài)坐標變換:

5.4.4 坐標點變換(C++)
1.坐標點變換實現(xiàn)
功能包 cpp04_tf_listener 的 src 目錄下,新建 C++ 文件 demo02_message_filter.cpp,并編輯文件,輸入如下內(nèi)容:

在創(chuàng)建功能包時,所依賴的部分功能包已經(jīng)自動配置了,不過為了實現(xiàn)坐標點變換,還需要添加依賴包tf2_geometry_msgs
和
message_filters
,修改后的配置內(nèi)容如下:

2.CMakeLists.txt
CMakeLists.txt 文件修改后的內(nèi)容如下:

3.編譯
終端中進入當前工作空間,編譯功能包:
colcon build --packages-select cpp04_tf_listener

5.4.5 坐標點變換(Python)
暫無。

B站有完整的ros系列教程視頻,可以觀看完整內(nèi)容ros課程ROS2理論與實踐
更多內(nèi)容將在猛獅知識星球社區(qū)更新最新課程,后續(xù)將推出更多優(yōu)質(zhì)內(nèi)容——詳情可關(guān)注猛獅集訓營公眾號和猛獅集訓營官方網(wǎng)站。