如何在catkin_ws根目录执行roslaunch start.launch命令?
解决方案:在catkin_ws根目录启动顶层launch文件
下面是几种无需合并现有功能包即可实现需求的方法,按复杂度从低到高排序:
方法1:直接指定launch文件路径
这是最直接的方案,无需修改任何配置或文件结构,在catkin_ws根目录直接运行:
roslaunch ./launch/start.launch
如果终端当前不在catkin_ws根目录,也可以使用绝对路径:
roslaunch ~/catkin_ws/launch/start.launch
方法2:创建bash别名简化命令
如果觉得每次输入路径麻烦,可给启动命令创建一个别名:
- 打开bash配置文件:
nano ~/.bashrc
- 在文件末尾添加一行:
alias launch_all='cd ~/catkin_ws && roslaunch ./launch/start.launch'
- 使配置生效:
source ~/.bashrc
之后无论在哪个目录,输入launch_all即可启动所有节点。
方法3:将顶层launch目录加入ROS_PACKAGE_PATH
roslaunch会在ROS_PACKAGE_PATH包含的目录中查找launch文件,因此可以把顶层launch目录加入该环境变量:
- 打开bash配置文件:
nano ~/.bashrc
- 在文件末尾添加:
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/launch
- 生效配置:
source ~/.bashrc
之后在catkin_ws根目录(甚至任何目录)直接运行:
roslaunch start.launch
注意:如果launch文件中引用了相对路径的资源(比如config_path),需确保路径正确,建议改为绝对路径或对应功能包的相对路径(例如$(find rslidar_sdk)/config/config.yaml)。
方法4:创建轻量launch管理功能包(符合ROS规范)
若想严格遵循ROS包结构,同时不打乱现有功能包独立性,可创建一个专门存放顶层launch文件的空功能包:
- 进入catkin_ws/src目录:
cd ~/catkin_ws/src
- 创建空功能包:
catkin_create_pkg system_launch
- 在该包下创建launch目录:
mkdir -p system_launch/launch
- 将原
start.launch移动到该目录:
mv ~/catkin_ws/launch/start.launch ~/catkin_ws/src/system_launch/launch/
- 返回catkin_ws根目录编译:
cd ~/catkin_ws && catkin_make
- 之后在任何目录都可通过以下命令启动:
roslaunch system_launch start.launch
该方案既符合ROS包管理规范,又能保持各功能包独立性,是长期使用的推荐方案。
你的原始start.launch文件内容:
<launch> <node pkg="rslidar_sdk" name="rslidar_sdk_node" type="rslidar_sdk_node" output="screen"> <param name="config_path" value=""/> </node> <node pkg="cam_node" name="cam_node" type="cam_node" output="screen"> <param name="config_path" value=""/> </node> <node pkg="imu_node" name="imu_node" type="imu_node" output="screen"> <param name="config_path" value=""/> </node> <node pkg="lidarconv" name="lidarconv_node" type="lidarconv_node" output="screen"> <param name="config_path" value=""/> </node> <!-- rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIRT --> </launch>
内容的提问来源于stack exchange,提问作者Hongru Zhang
相关产品推荐
相关产品推荐

