小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
ros1 source 与export ROS_PACKAGE_PATH区别
-
ORB_SLAM3只有ros1的版本,为了学习,ros1又重新跑了一遍,记个笔记,以后查起来方便,也给后来者留个脚印,少走点弯路。
环境:ubuntu20.4,noetic
每次运行程序需要source devel/setup.bash,也可以写入.bashrc
还可以设置包路径:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/m/m_ros1_ws
这2种添加环境变量的方式是有区别的。
mkdir -p m_ros1_ws/src //创建工作空间
cd m_ros1_ws/src
catkin_create_pkg hello roscpp rospy std_msgs //创建功能包
cd hello/src //进入包内
touch hello.cpp //创建cpp文件#include<ros/ros.h> int main(int argc,char**argv) { printf("hello world"); return 0; }
hello文件夹内CMakeLists.txt末尾加:
add_executable(hello src/hello.cpp)cd m_ros1_ws //进入工作空间
catkin_make //编译
在 devel/lib/hello/ 生成hello可执行文件
source devel/setup.bash
rosrun hello hello //运行输出 hello world
但是我们也可以把生成的可执行文件hello复制到 hello文件夹下
编辑 .bashrc 末尾加上
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/m/m_ros1_ws
重新打开终端 不输入source 语句 rosrun hello hello
此时也可以输出结果 hello world,但是这次运行的是hello是我们复制进的可执行文件而不是devel/lib/hello内的可执行文件。
我们可以通过删除hello可执行文件进行测试。
还有一点,包名并不一定是文件夹的名字,而是package.xml 文件设定的名字。
我们知道了这些就可以骗过工作空间,把从别的地方cmake编译好的可执行程序放入我们的包,通过 rosrun 包名 程序名去执行,就像这样运行:
rosrun hello hello -
@毛哥成山轮胎机油保养 source只适用于当前活动shell范围内,而ROS_PACKAGE_PATH可以系统全局使用
-
@醉后不知天在水 我这么测试的原因是我要把从别的地方用cmake编译的可执行文件放到我的ros包内,好多开源程序在ros标准空间内编译还是很麻烦的,我可以编译好了假装它就在工作空间内