17.ROS中的坐标系管理系统

参考书籍“”“机器人学导论”

1、机器人中的坐标变换

在这里插入图片描述
1.1.安装tf功能包

chen@ubuntu:~$ sudo apt-get install ros.melodic.turtle.tf

1.2启动roslaunch的一个脚本文件来启动很多节点

chen@ubuntu:~$ roslaunch turtle_tf turtle_tf_demo.launch

1.3运行海龟的键盘控制节点

chen@ubuntu:~$ rosrun turtlesim turtle_teleop_key

通过键盘移动发现,后面的海龟会跟随前面的海龟运动。
在这里插入图片描述
2、查看系统中TF坐标系之间的关系

chen@ubuntu:~$ rosrun tf view_frames
the rosdep view is empty: call 'sudo rosdep init' and 'rosdep update'
Listening to /tf for 5.0 seconds
Done Listening
dot - graphviz version 2.40.1 (20161225.0304)

Detected dot version 2.40
frames.pdf generated

生成了一个pdf文件,在主目录下
有三个坐标系,海龟1,2,世界坐标
在这里插入图片描述
3、直接查看TF树中任意两坐标系之间的关系

chen@ubuntu:~$ rosrun tf tf_echo turtle1 turtle2
At time 1582791509.696
- Translation: [0.000, 0.000, 0.000]//坐标系平移,x,y,z
- Rotation: in Quaternion [0.000, 0.000, -0.268, 0.963]
            in RPY (radian) [0.000, 0.000, -0.544]
            in RPY (degree) [0.000, 0.000, -31.141]
            //坐标系旋转,通过四元素,弧度,角度三个方法描述
At time 1582791552.415
- Translation: [-0.104, -0.005, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.023, 1.000]
            in RPY (radian) [0.000, -0.000, 0.046]
            in RPY (degree) [0.000, -0.000, 2.615]

4、直接查看TF树中任意两坐标系之间的关系,可视化工具RVIZ

chen@ubuntu:~$ rosrun rviz rviz -d 'rospack find turtle_tf' /rviz/turtle_rviz.rviz

在这里插入图片描述
通过鼠标可以看到,两个海龟的跟随移动,通过获取向量

二、tf坐标系广播与监听的编程实现

1.创建功能包learning_tf

chen@ubuntu:~/catkin_ws/src$ catkin_create_pkg learning_tf roscpp rospy tf turtlesim

1.1 创建tf广播器代码(C++)
1.2创建tf监听器代码(C++)
1.3配置tf广播器与监听器代码编译规则

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})

编译出错:

Scanning dependencies of target turtle_tf_listener
[ 47%] Building CXX object learning_tf/CMakeFiles/turtle_tf_listener.dir/src/turtle_tf_listener.cpp.o
[ 50%] Linking CXX executable /home/chen/catkin_ws/devel/lib/learning_tf/turtle_tf_listener
CMakeFiles/turtle_tf_listener.dir/src/turtle_tf_listener.cpp.o:在函数‘main’中:
turtle_tf_listener.cpp:(.text+0x326):对‘tf::Transformer::DEFAULT_CACHE_TIME’未定义的引用
turtle_tf_listener.cpp:(.text+0x362):对‘tf::TransformListener::TransformListener(ros::Duration, bool)’未定义的引用

原因:创建catkin_create_pkg 时少了依赖tf
1.4运行

chen@ubuntu:~$ roscore
1.5不用roslaunch,打散成多个节点运行,涉及到重映射
运行海龟仿真器节点
chen@ubuntu:~$ rosrun turtlesim turtlesim_node
运行海龟1与世界坐标产生关系

chen@ubuntu:~$ rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1

运行海龟2与世界坐标产生关系
chen@ubuntu:~$ rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
创建listener海龟2

chen@ubuntu:~$ rosrun learning_tf turtle_tf_listener

运行键盘控制节点
chen@ubuntu:~$ rosrun turtlesim turtle_teleop_key

移动键盘
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐