问题:
启动ROSbridge后,使用ros2 topic list,但是没有topic显示,我这部分代码正常的是显示topic:cmd_vel
$ ros2 topic list
2022-10-05 12:32:08.462 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7412: open_and_lock_file failed -> Function open_port_internal
2022-10-05 12:32:08.462 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7413: open_and_lock_file failed -> Function open_port_internal
/parameter_events
/rosout
没有报错,但是有警告,如下:
[Warning] [omni.physx.plugin] The rigid body at /World/litao_test/turtlebot3_burger/imu_link has a possibly invalid inertia tensor of {1.0, 1.0, 1.0} and a negative mass, small sphere approximated inertia was used. Either specify correct values in the mass properties, or add collider(s) to any shape(s) that you wish to automatically compute mass properties for. If you do not want the objects to collide, add colliders regardless then disable the 'enable collision' property.
1、问题排查第一步:Collect Assets
参考问题链接:https://forums.developer.nvidia.com/t/havent-get-cmd-vel-when-follow-ros2-tutorial/219095
简单来说,就是当你搭建的场景里包含不同路径的usd或者urdf文件,那你需要在保存的时候,增加一步Collect Assets的步骤,官网教程如下:
- Collect Assets: If your current stage used many reference USD stages, materials and textures from other folders and servers, you should Collect Assets to make sure all the external references that are used in your stage gets collected in one folder. To do so, save the current USD locally, then find it in the Content tab, right-click on it and select Collect Asset.
2、问题排查第二步
参考问题链接
https://github.com/eProsima/Fast-DDS/issues/3000
博主说有时候尝试关闭网络连接能正常启动,我尝试了,对于我没用。我觉得关键问题还是在于启动顺序,在sim启动前需要配置好环境变量,启动sim后,ROS终端再初始化ROS环境。
具体配置如下步骤:
首先创建一个名为fastdds.xml的文件放入以下路径:~/.ros/,将以下代码段链接粘贴到该文件中。
<?xml version="1.0" encoding="UTF-8" ?>
<license>Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
NVIDIA CORPORATION and its licensors retain all intellectual property
and proprietary rights in and to this software, related documentation
and any modifications thereto. Any use, reproduction, disclosure or
distribution of this software and related documentation without an express
license agreement from NVIDIA CORPORATION is strictly prohibited.</license>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles" >
<transport_descriptors>
<transport_descriptor>
<transport_id>UdpTransport</transport_id>
<type>UDPv4</type>
</transport_descriptor>
</transport_descriptors>
<participant profile_name="udp_transport_profile" is_default_profile="true">
<rtps>
<userTransports>
<transport_id>UdpTransport</transport_id>
</userTransports>
<useBuiltinTransports>false</useBuiltinTransports>
</rtps>
</participant>
</profiles>
注:在.bashrc文件中写入或命令行中设置这两个环境变量,指向FASTRTPS_DEFAULT_PROFILES_FILE保存配置的位置。
export FASTRTPS_DEFAULT_PROFILES_FILE=~/.ros/fastdds.xml
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
注:此处比官方的多配置了一个变量rmw_fastrtps_cpp
RMW代表ROS Middleware,是ROS 2中实现通信(Communication)功能的中间件层。在ROS 2中,RMW作为一个抽象层,连接了ROS 2的核心功能(例如节点、话题、服务、参数等)与底层通信的具体实现。RMW的目的是使ROS 2可以在不同的通信中间件之间切换,从而实现ROS 2在多种不同硬件和操作系统平台上的跨平台性。
在ROS 2中,有多个RMW实现可供选择,每个RMW实现都使用不同的底层通信中间件。一些常见的RMW实现包括:
- rmw_fastrtps_cpp:使用Fast RTPS作为底层通信中间件,它是一个快速实时发布/订阅协议的实现。
- rmw_cyclonedds_cpp:使用Cyclone DDS作为底层通信中间件,它是一个支持多种操作系统的实时通信框架。
- rmw_connext_dds:使用RTI Connext DDS作为底层通信中间件,它提供了高性能的实时通信能力。
- rmw_opensplice_cpp:使用OpenSplice DDS作为底层通信中间件,它是一个实时数据分发服务的实现。
通过使用不同的RMW实现,ROS 2可以在各种不同的硬件平台、操作系统和网络配置下运行,并能满足不同应用场景的需求。用户可以根据具体的应用需求选择适合的RMW实现,或者根据具体的硬件和网络条件进行优化。
启动过程:
1、将ROS默认环境变量停用,在终端中运行:
unset LD_LIBRARY_PATH
2、将fastdds运行
export FASTRTPS_DEFAULT_PROFILES_FILE=~/.ros/fastdds.xml
3、(可选)在启动 Isaac Sim 之前运行。稍后您将有机会决定是在您的环境中使用此 ROS_DOMAIN_ID,还是对任何给定主题明确使用不同的 id 号。
export ROS_DOMAIN_ID=(id_number)
4、启动isaac sim,以上步骤需要都完成再启动
5、启动ROS终端:
source /opt/ros/foxy/setup.bash
cd foxy_ws
source install/local_setup.bash
网友评论