常見問題
重新啟動後 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

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 已知問題
- IMU 權限:若 D435i IMU 出現 Permission denied,依 librealsense patch 安裝修正。

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