运行中Docker镜像内自定义ROS包无法被rospack识别问题求助(无人机控制)
解决ROS包编译后rospack无法识别的问题
核心路径排查
- 确认你的
tii_pkg包必须放在catkin工作空间的src子目录下,正确路径示例:~/catkin_ws/src/tii_pkg,别误放到catkin_ws根目录或其他位置。 - 编译完成后,务必在catkin工作空间根目录执行:
source devel/setup.bash(用zsh则替换为setup.zsh)。执行echo $ROS_PACKAGE_PATH验证,输出里必须包含你的catkin_ws路径/devel/share,比如/home/user/catkin_ws/devel/share:/opt/ros/noetic/share。
编译线程数无关问题说明
编译时自动用-j8 -l8是catkin_make根据CPU核心数自动选择的线程配置,和rospack找不到包没有直接关联。如果需要指定-j4 -l4,编译时直接执行catkin_make -j4 -l4即可,不影响包的识别。
强制更新ROS包索引
如果路径验证无误仍找不到包,执行rospack profile命令,它会重新扫描所有ROS包路径并更新索引。之后再运行rospack find tii_pkg,确认是否能正常找到包。
Docker环境额外注意事项
- 每次进入Docker容器后,都需要重新source
setup.bash,或者把source命令写入容器的~/.bashrc:执行echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc,下次进入容器会自动生效。 - 确保你的catkin工作空间位于容器的持久化挂载目录中,避免容器重启后编译生成的文件丢失,导致包无法被识别。
自定义脚本配合PX4的验证步骤
等rospack能正常找到tii_pkg后,按以下步骤验证:
- 脚本中引用包路径时,用
$(rospack find tii_pkg)获取绝对路径,避免硬编码路径出错。 - 先启动PX4相关节点(比如Gazebo仿真、MAVROS节点),再运行自定义脚本/节点,确保节点间通信正常。
内容的提问来源于stack exchange,提问作者KyôroWTD
相关产品推荐
相关产品推荐

