目录
写在前面的话
以下问题是我在实验中遇到的,可能不是对谁都适用,具体问题具体分析,学会自己发现和解决问题。本文仅作参考,有问题欢迎加我微信一起探讨。
遇到的问题
问题一:启动了多个 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