跳至主要内容

常見問題

重新啟動後 ROS 2 node list 缺少節點

這通常是因為 ros node 啟動/結束過快,ROS 2 daemon 在快取裡仍認為節點存活。若 ros2 node list 找不到節點,可改用:

$ ros2 node list --no-daemon

或執行 ros2 daemon stop; ros2 daemon start 重新啟動 daemon。

禁用 ROS 2 Shared Memory

FastDDS 可透過 XML 設定檔強制使用 UDPv4:

$ export FASTRTPS_DEFAULT_PROFILES_FILE=/path/fastdds_no_shared_memory.xml

fastdds_no_shared_memory.xml 範例:

<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<transport_descriptors>
<transport_descriptor>
<transport_id>CustomUdpTransport</transport_id>
<type>UDPv4</type>
</transport_descriptor>
</transport_descriptors>
<participant profile_name="participant_profile" is_default_profile="true">
<rtps>
<userTransports>
<transport_id>CustomUdpTransport</transport_id>
</userTransports>
<useBuiltinTransports>false</useBuiltinTransports>
</rtps>
</participant>
</profiles>

Gazebo 出現 OpenGL 錯誤

若啟動 Gazebo 時出現 OpenGL 錯誤,可改用 ogre render engine:

$ ign gazebo tugbot_warehouse.sdf --render-engine ogre

Gazebo OpenGL error

ROS 1 bag 轉 ROS 2 bag

參考 https://gitlab.com/ternaris/rosbags

$ git clone https://gitlab.com/ternaris/rosbags.git
$ pip install rosbags

rosbags/src/rosbags/convert/converter.py 最後加入:

convert_1to2("src", "dst", "excluded topics", "included topics")

例如:

...
try:
func(src, dst, exclude_topics, include_topics)
except (ReaderError1, ReaderError2) as err:
raise ConverterError(f'Reading source bag: {err}') from err
except (WriterError1, WriterError2) as err:
raise ConverterError(f'Writing destination bag: {err}') from err
except Exception as err:
raise ConverterError(f'Converting rosbag: {err!r}') from err

convert_1to2("/home/user/Downloads/dataset.bag", "/home/user/Downloads/dataset", "", "/points_raw /imu_correct")

執行 python3 converter.py 即可。

設定 ROS_DOMAIN_ID

在主機:

$ echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc
$ source ~/.bashrc

確認變數是否修改成功

$ echo $ROS_DOMAIN_ID

在容器中設定ROS_DOMAIN_ID

步驟1: 開啟指定的 docker-compose.yml文件

$ cd /usr/local/Advantech/ros/container/docker/docker-compose/<docker_container_name>
$ vim docker-compose.yml

步驟2: 在docker-compose.yml檔案中設定ROS_DOMAIN_ID Note: 如果您希望使用主機上的ROS_DOMAIN_ID變數,請設定ROS_DOMAIN_ID=your_domain_id

.
.
.
environment:
- ROS_DOMAIN_ID=<your_domain_id>
.
.
.

步驟3: 重新啟動容器以更新容器的環境變數

$ cd /usr/local/Advantech/ros/container/docker
$ ./stop.sh <docker_container_name>
$ ./launch.sh <docker_container_name>

步驟4: 確認變數是否修改成功

$ docker exec -it <docker_container_name> bash
$ echo $ROS_DOMAIN_ID

RealSense 已知問題

  1. IMU 權限:若 D435i IMU 出現 Permission denied,依 librealsense patch 安裝修正。

ROS2_Suite_D435i-imu-issue

  1. PointCloud(Jetson):Jetson 平台無法生成點雲,可參考 Issue #2575