目录
- 写在前面的话
- 遇到的问题
- 问题一:启动了多个 robot_state_publisher
- 解决办法
- 问题二:rviz 启动报错
- 解决办法
- 问题三:rviz 中 wheel 一直指向 base_link
- 解决方法
- 问题四:摄像头和opencv坐标系的问题
- 解决方法
- 问题五:雷达点很小显示不清晰
- 问题六:在gazebo中显示雷达和图像
- 解决方法
- 参考文章
写在前面的话
以下问题是我在实验中遇到的,可能不是对谁都适用,具体问题具体分析,学会自己发现和解决问题。本文仅作参考,有问题欢迎加我微信一起探讨。
遇到的问题
问题一:启动了多个 robot_state_publisher
[ERRoR] [launch]: caught exception in launch (see debug for traceback): caught multiple exceptions when trying to load file of format [launch]:
InvalidfrontendLaunchfileError: caught multiple exceptions when trying to load file of format [launch]:
- ParseError:syntax error:line 1,column 0
- ScannerError: mapping values are not allowed here in "/home/xucg/car_exp_ws/install/car_urdf/share/car_urdf/launch/gazebo.launch", line 16, column 26
- XacroException: name 'base link point' is not defined
when evaluating expression 'base link point'
解决办法
删除掉 package.xml 里面的 robot_state_publisher 这行,再次编译运行即可。
问题二:rviz 启动报错
解决办法
将 .rviz 文件中 Gloabl Options 的 Fixed Frame 修改成 xacro 中已经声明的 Link (base link 或者 base_footprint),这个报错是我从其他地方复制的 rviz 文件会有问题。这个也可以在 rviz 界面的左上角参数自己修改。
问题三:rviz 中 wheel 一直指向 base_link
我的模型是四轮转向模型,转向器是跟base_link连接,车轮是跟转向器连接,所以这里的指向是不对的,它会出现下图的报错找不到 transform
[rviz2-10] Error:TF_NAN_INPUT: Ignoring transform for child frame id "left_front_wheel_Link" from authority "Authority undetectable" because of a nan value in the transform (nan nan nan)(nan nan nan nan)
[rviz2-10] at line 235 in ./src/buffer core.cpp
[rviz2-10] TF DENORMALIZED QUATERNION: Ignoring transform for child frame id "left_front_wheel_Link"
[rviz2-10] Error:from authority "Authority undetectable" because of an invalid quaternion in the transform (nan nan nan nan)
注意:修改.rviz文件中Tree是没用的,我尝试过
解决方法
上述报错的原因说是robot_state_publisher只能发布静态信息(fixed),不能发布动态信息(continues),解决办法是多启动一个 joint_state_publisher 就行
注意:如果还启动了 joint_state_broadcaster 还要把这个注释掉
robot_state_publisher = Node(package='robot_state_publisher',executable='robot_state_publisher',parameters=[{'use_sim_time': True}, params, # {"publish_frequency":15.0},],output='screen')joint_state_publisher_node = Node(package='joint_state_publisher',executable='joint_state_publisher',)# gazebo在加载urdf时,根据urdf的设定,会启动一个joint_states节点# 关节状态发布器# joint_state_broadcaster = ExecuteProcess(# cmd=['ros2', 'control', 'load_controller', '--set-state', 'active', 'joint_state_broadcaster'], # output='screen'# )
问题四:摄像头和opencv坐标系的问题
摄像头的坐标在 rviz 中是 Z 轴向上,X 向前,而在Opencv中是 Z 轴是向前,Y轴向上。
需要加上一个 camera_optical_joint 和 camera_link_optical,代码如下所示。
解决方法
<link name="camera_link_optical"></link><joint name="camera_optical_joint" type="fixed"><!-- these values have to be these values otherwise the gazebo cameraimage won't be aligned properly with the frame it is supposedlyoriginating from --><origin xyz="0 0 0" rpy="${-pi/2} 0 ${-pi/2}"/><parent link="camera_link"/><child link="camera_link_optical"/></joint><gazebo reference="${prefix}_link"><sensor type="camera" name="camera_node"><visualize>true</visualize><update_rate>30.0</update_rate><camera name="head"><horizontal_fov>1.3962634</horizontal_fov><image><width>1280</width><height>720</height><format>R8G8B8</format></image><clip><near>0.02</near><far>300</far></clip><noise><type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise></camera><plugin name="gazebo_camera" filename="libgazebo_ros_camera.so"><ros><!-- <namespace>stereo</namespace> --><remapping>~/image_raw:=image_raw</remapping><remapping>~/camera_info:=camera_info</remapping></ros><camera_name>${prefix}</camera_name><frame_name>camera_link_optical</frame_name><hack_baseline>0.2</hack_baseline></plugin></sensor></gazebo>
问题五:雷达点很小显示不清晰
修改 Size 的显示大小,默认是0.01m,设置大点即可
问题六:在gazebo中显示雷达和图像
解决方法
增加 visualize 属性为 true 即可
<visualize>true</visualize>
参考文章
1 No transform found between base link and wheels for the TF of my robot when setting odom as fixed frame. Robot steers just fine when sending twist messages to /cmd_vel
2 Rviz ERROR: No transform from [wheel_left_link] & [wheel_right_link] to [odom]
3 No transform from front_left_wheel to base_link