环境:
软件
硬件
by default:
编译源码安装–》webots R2021b
参考:https://github.com/cyberbotics/webots_ros2/wiki/Build-and-Install
使用软件包安装》》webots R2022a
sudo apt-get install ros-$ROS_DISTRO-webots-ros2
通过源码安装时,发现编译及相关的问题,以下具体展开。
colcon build 出现两个warning:
Starting >>> webots_ros2_msgs
Starting >>> webots_ros2_importer
Finished <<< webots_ros2_msgs [2.48s]
Starting >>> webots_ros2_driver
Starting >>> webots_ros2_core
WARNING:webots_ros2_core: This package will be removed with the release of Webots R2023a. Use “webots_ros2_driver” instead. 0.9s]
Finished <<< webots_ros2_importer [4.75s]
Finished <<< webots_ros2_driver [2.75s]
Starting >>> webots_ros2_control
Finished <<< webots_ros2_control [0.52s]
Starting >>> webots_ros2_epuck
Starting >>> webots_ros2_tiago
Starting >>> webots_ros2_turtlebot
Starting >>> webots_ros2_universal_robot
— stderr: webots_ros2_core
WARNING:webots_ros2_core: This package will be removed with the release of Webots R2023a. Use “webots_ros2_driver” instead.
Finished <<< webots_ros2_core [5.37s]
Starting >>> webots_ros2_mavic
Starting >>> webots_ros2_tesla
Finished <<< webots_ros2_epuck [8.08s]
Finished <<< webots_ros2_turtlebot [8.02s]
Finished <<< webots_ros2_tiago [8.34s]
Finished <<< webots_ros2_universal_robot [8.33s]
Finished <<< webots_ros2_tesla [5.73s]
Finished <<< webots_ros2_mavic [5.90s]
Starting >>> webots_ros2_tests
Finished <<< webots_ros2_tests [3.75s]
Starting >>> webots_ros2
Finished <<< webots_ros2 [3.85s]
Summary: 13 packages finished [23.6s]
1 package had stderr output: webots_ros2_core
执行 ros2 launch webots_ros2_epuck robot_with_tools_launch.py rviz:=true
出现大量刷屏:
[rviz2-8] [INFO] [1646790185.366637822] [rviz]: Message Filter dropping message: frame ‘odom’ at time 6.920 for reason ‘Unknown’
[rviz2-8] [INFO] [1646790185.366751220] [rviz]: Message Filter dropping message: frame ‘odom’ at time 6.920 for reason ‘Unknown’
[rviz2-8] [INFO] [1646790185.399252819] [rviz]: Message Filter dropping message: frame ‘laser_scanner’ at time 6.940 for reason ‘Unknown’
[rviz2-8] [INFO] [1646790185.399423978] [rviz]: Message Filter dropping message: frame ‘odom’ at time 6.940 for reason ‘Unknown’
[rviz2-8] [INFO] [1646790185.399530257] [rviz]: Message Filter dropping message: frame ‘odom’ at time 6.940 for reason ‘Unknown’
[rviz2-8] [INFO] [1646790185.430814747] [rviz]: Message Filter dropping message: frame ‘laser_scanner’ at time 6.980 for reason ‘Unknown’
[rviz2-8] [INFO] [1646790185.431341853] [rviz]: Message Filter dropping message: frame ‘odom’ at time 6.980 for reason ‘Unknown’
检查 Odom和map的tf
cym@cym:~/ros2_webots_ws$ ros2 run tf2_ros tf2_echo odom map
[INFO] [1646790754.425162129] [tf2_echo]: Waiting for transform odom -> map: Invalid frame ID “odom” passed to canTransform argument target_frame - frame does not exist
[INFO] [1646790756.382762105] [tf2_echo]: Waiting for transform odom -> map: Invalid frame ID “map” passed to canTransform argument source_frame - frame does not exist
[INFO] [1646790757.382766578] [tf2_echo]: Waiting for transform odom -> map: Invalid frame ID “map” passed to canTransform argument source_frame - frame does not exist
[INFO] [1646790758.382791288] [tf2_echo]: Waiting for transform odom -> map: Invalid frame ID “map” passed to canTransform argument source_frame - frame does not exist
rviz 挂掉:(偶尔不挂)
rviz2: /tmp/binarydeb/ros-foxy-rviz-ogre-vendor-8.2.6/obj-x86_64-linux-gnu/ogre-v1.12.1-prefix/src/ogre-v1.12.1/OgreMain/include/OgreAxisAlignedBox.h:225: void Ogre::AxisAlignedBox::setExtents(const Vector3&, const Vector3&): Assertion `(min.x <= max.x && min.y <= max.y && min.z <= max.z) && “The minimum corner of the box must be less than or equal to maximum corner”’ failed.
总结:
上述过程发现两个问题:
问题1: 按照教程,webots编译出现warning
问题2: 按照教程,运行webot和rviz,rviz间歇性挂掉。
这个warning 不确定是否会影响后续功能的使用。如果是使用webot R2023a,可以尝试忽略webots_ros2_core的编译(在该包里放置:命名为COLCON_IGNORE的空文件即可忽略)
但为了避免这个warning会隐藏着巨大的坑,继续深入探究
为什么会产生这个warning呢?
潜意识里,我就先怀疑环境问题。因为之前这篇文章(
https://blog.csdn.net/intoforforever/article/details/123126915spm=1001.2014.3001.5502
https://blog.csdn.net/ZhangRelay/article/details/123135718 )提到的问题,就是由于版本环境问题导致。。
那先看一下包的版本:
git branch -vv
此时使用的包是主分支的,
打开git 看了下,master和foxy的分支内容还是有差异的
试着切换到foxy分支:
git checkout foxy
git pull
在此过程,另外发现一个"彩蛋" ~:
紧接着上面的过程,我们先看下这个目录webots_ros2/webots_ros2_driver/webots的git版本信息:
本地和master还是一样的:commitid一样:3c177d…
》》没有拉取foxy分支对应的webots文件夹
为什么会这样呢??继续往下看。
原来:
这里的webots_ros2/webots_ros2_driver/webots 文件夹关联到另一个独立分支。
而使用git checkout 无法拉取关联的其他独立分支
比如:
两个独立项目,一个项目分支A,另一个项目分支B。
A使用到B的内容,即分支A嵌套着分支B
git checkout A, 无法拉取关联的分支B
这里涉及到git submodules的概念,在一个项目中拉取关联另一个项目的内容
要使用:
git checkout --recurse-submodules
对应clone就是:
git clone --recurse-submodules
根据问题1的处理,版本环境都一一对应后,rviz依然出现间歇性挂掉。。
网上找到这个回答:https://blog.csdn.net/Electrical_IT/article/details/108316566
但是仍旧没有解决,如果是超出范围,应该是一直都不能用;而不是有时候rviz不挂,正常使用。
多次测试发现:
执行launch之后,等待一段时间(20s+),再把rviz上fixed frame 的map修改为odom,rviz大概率不会挂。如下图,没有挂的且正常使用的rviz:
如果执行launch,马上修改map为odom,直接挂掉:
这个问题还想不通┭┮﹏┭┮。。待解决┭┮﹏┭┮,只能暂时先测试了
以上问题,欢迎评论指教,感谢。
end!