欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-20 19:50:33
...

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

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

1、机器人中的坐标变换

17.ROS中的坐标系管理系统
1.1.安装tf功能包

aaa@qq.com:~$ sudo apt-get install ros.melodic.turtle.tf

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

aaa@qq.com:~$ roslaunch turtle_tf turtle_tf_demo.launch

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

aaa@qq.com:~$ rosrun turtlesim turtle_teleop_key

通过键盘移动发现,后面的海龟会跟随前面的海龟运动。
17.ROS中的坐标系管理系统
2、查看系统中TF坐标系之间的关系

aaa@qq.com:~$ 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,世界坐标
17.ROS中的坐标系管理系统
3、直接查看TF树中任意两坐标系之间的关系

aaa@qq.com:~$ 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

aaa@qq.com:~$ rosrun rviz rviz -d 'rospack find turtle_tf' /rviz/turtle_rviz.rviz

17.ROS中的坐标系管理系统
通过鼠标可以看到,两个海龟的跟随移动,通过获取向量

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

1.创建功能包learning_tf

aaa@qq.com:~/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运行

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

aaa@qq.com:~$ rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1

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

aaa@qq.com:~$ rosrun learning_tf turtle_tf_listener

运行键盘控制节点
aaa@qq.com:~$ rosrun turtlesim turtle_teleop_key

移动键盘
17.ROS中的坐标系管理系统

相关标签: ros