首先启动核心
roscore
然后手动运行TF广播脚本
rosrun my_transform_broadcaster wgs84_to_map_broadcaster.py
如果报错ERROR未找到文件就进行如下操作
cd catkin_ws
catkin_make
source devel/setup.bash
在重新手动运行
rosrun my_transform_broadcaster wgs84_to_map_broadcaster.py
使用rosrun tf tf_echo
检查 TF 变换
rosrun tf tf_echo /wgs84 /map
同时可以使用rqt_tf_tree
检查 TF 变换
rosrun rqt_tf_tree rqt_tf_tree
没问题后启动mapviz
roslaunch mapviz mapviz.launch
一、启动mapviz后出现问题Error: No transform between /wgs84 and map创建wgs84_to_map_broadcaster.py
脚本
1.创建并配置 ROS 包
确保你的脚本在一个正确配置的 ROS 包中。假设你的包名是 my_transform_broadcaster
。
创建 ROS 包(如果还没有)
cd ~/catkin_ws/src
catkin_create_pkg my_transform_broadcaster rospy tf
创建wgs84_to_map_broadcaster.py
脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
import tf
from geometry_msgs.msg import TransformStamped
def broadcaster():
rospy.init_node('wgs84_to_map_broadcaster')
br = tf.TransformBroadcaster()
rate = rospy.Rate(10.0)
rospy.loginfo("wgs84_to_map_broadcaster node started")
while not rospy.is_shutdown():
br.sendTransform((0.0, 0.0, 0.0), # 平移 (x, y, z)
tf.transformations.quaternion_from_euler(0, 0, 0), # 旋转 (roll, pitch, yaw)
rospy.Time.now() - rospy.Duration(0.1), # 100ms 缓存
'map', # 子坐标系
'wgs84') # 父坐标系
rospy.loginfo("Broadcasting transform from /wgs84 to /map")
rate.sleep()
if __name__ == '__main__':
try:
broadcaster()
except rospy.ROSInterruptException:
pass
确保脚本具有可执行权限
chmod +x ~/catkin_ws/src/my_transform_broadcaster/scripts/wgs84_to_map_broadcaster.py
2. 修改 CMakeLists.txt
编辑 my_transform_broadcaster
包中的 CMakeLists.txt
文件,确保添加以下内容以便于安装脚本:
catkin_install_python(PROGRAMS scripts/wgs84_to_map_broadcaster.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
3. 编译工作空间
返回工作空间的根目录,并编译工作空间:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
4. 运行脚本
使用 rosrun
命令运行脚本:
rosrun my_transform_broadcaster wgs84_to_map_broadcaster.py
二、修改Mapviz的launch文件
<launch>
<node pkg="mapviz" type="mapviz" name="mapviz"></node>
<node pkg="swri_transform_util" type="initialize_origin.py" name="initialize_origin" >
<param name="local_xy_frame" value="/map"/>
<param name="local_xy_origin" value="tianditu"/>
<rosparam param="local_xy_origins">
[{ name: tianditu,
latitude: 29.45196669,
longitude: 98.61370577,
altitude: 233.719,
heading: 0.0},
{ name: xihu,
latitude: 30.2458333,
longitude: 120.1416666,
altitude: 0.0,
heading: 0.0}]
</rosparam>
</node>
<node pkg="tf" type="static_transform_publisher" name="swri_transform" args="0 0 0 0 0 0 /map /origin 100" />
<node pkg="my_transform_broadcaster" type="wgs84_to_map_broadcaster.py" name="wgs84_to_map_broadcaster"/>
</launch>