1、创建工作空间
mkdir -p /目录/catkin_helloSLAM/src #创建一个工作空间
cd /目录/catkin_helloSLAM/src #进入该目录
catkin_init_workspace #会产生一个Cmake.list文件在该目录下
编译空的工作空间
cd .. #回到与src同级别的路径下
catkin_make
这个时候会多了两个文件夹,一个devel和一个build。并且在devel下有几个setup.*sh,我们可以根据我们的终端类型来进行确定使用那个sh来激活环境变量,如我使用的是bash终端,在src同级别的路径的终端下运行
source devel/setup.bash #激活该工作空间的环境变量
echo $ROS_PACKAGE_PATH #读取环境变量,检查环境变量是否生效。我的为/home/lexiaoxia/Codes/lxxcodes/HelloROS/src:/opt/ros/kinetic/share
打印的路径中已经包含当前工作空间的路径,就说明环境变量设置成功。
也可以在终端的配置文件中加入环境变量的设置:
echo "source /目录/devel/setup.bash">>~/.bashrc
之后就不用每次开一个终端都重新激活啦。
2.创建功能包(package)
cd src #进入src空间
catkin_create_pkg [pkg_name] std_msgs roscpp rospy
#创建功能包,pkg_name为包名字,后面的为依赖。注意,pkg_name只能包含小写字母。
catkin_create_pkg hello_slam roscpp
功能包名字只能是小写哦
这个命令会创建一个package,并在这个包下面生成了一系列的文件和文件夹:
CMakeLists.txt include package.xml src。其中package.xml是配置文件,生产所需要的依赖
3.放置源代码
我们把源代码放入到src文件中后,对CMakeList.txt和package.xml进行修改。
CMakeList.txt也会自动生成好,需要增加一句可执行文件的生成,和库文件的链接(若需要别的文件,则对应添加别的语句):
#声明想要的可执行文件的文件名,以及所需要的源列表,如果有多个源列表,空格列在此处
add_executable(helloSLAM src/helloSLAM.cpp)
target_link_libraries(helloSLAM ${catkin_LIBRARIES})
也可以不改:更方便,不用改名称直接引用就好。
add_executable(${PROJECT_NAME}_node src/hello_vins_node.cpp)
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES})
package.xml基本上不需要改动,会自动生成好。
4.源码的编译
接着就是编译工作区:
cd /catkin_目录 #回到工作区中与src同一层的路径下
catkin_make #进行编译
5.程序的执行
更新环境变量(每个终端):
#环境变量配置,使新建的catkin_ws工作空间可用
source devel/setup.bash
新建一个终端: roscore
再建一个终端: rosrun hello_slam helloSLAM
roscore有遇到一个问题:
roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://H:11311/
The traceback for the exception was written to the log file
解决:ROS官网解决方法:https://answers.ros.org/question/172879/kill-other-roscoremaster-processes-on-bourn-shell/
killall -9 roscore
killall -9 rosmaster
输出结果:
[ INFO] [1625929949.372822946]: hello,ROS!
ctrl+c是杀死roscore(推荐)
ctrl+z可能只是中断运行。
更多介绍:error是由于忘记运行roscore。
运行不同的功能包不同的节点
6、Roslaunch运行
home目录下ctrl+h显示隐藏文件,在对应的log文件中找到,显示输出的结果:
roslaunch把结果直接输出在终端:
7、若有多个节点node运行创建launch包
catkin_create_pkg launch建立功能包格式会识别格式
cd src/launch
touch run.launch
launch文件内容:
pkg:功能包的名称,通过catkin_create_pkg建立功能包的名称
name:节点名称,通过ros::init()可以设定
type:可执行文件的名称
通过rqt_graph可以查看节点之间发布的消息。