1.关于bash
Bash是一个能解释你输入进终端命令(即shell命令)的Shell程序,并且基于你的输入来运行命令
shell是一种脚本语言(bash是一个shell程序,是ubuntu中默认的shell)
2.关于.bashrc
.bashrc是home目录下的一个shell文件,用于储存用户的个性化设置。
在bash每次启动(如ubuntu的终端)时都会加载.bashrc文件中的内容,并根据内容定制当前bash的配置和环境
例如在.bashrc中加入echo在 “hello bash”,打开新的终端后便会显示一行“hello bash”
3.关于source(使用: source Filename)
source命令是在当前bash环境下读取并执行FileName中的命令
4.关于source devel/setup.bash
在工作空间的devel文件夹中存在几个setup.*sh形式的环境变量设置脚本。
使用source命令运行这些脚本文件,则可以设置工作空间的环境变量
为了确保环境变量已经生效,可以使用如下命令进行检查:echo $ROS_PACKAGE_PATH
没有用source运行该脚本时,打印的路径为:/opt/ros/noetic/share
运行后,打印的路径为:/home/w/桌面/catkin_ws/src:/opt/ros/noetic/share
在终端中使用source命令设置的环境变量只能在当前终端中生效
如果希望环境变量在所有终端中有效,则需要在终端的配置文件./bashrc中加入该语句
这样每次打开新的终端就不用重新输入,但缺点是这会让bashrc中的内容变多
5.关于ROS版本
ros有多个版本,每个版本的维护时间通常为5年,对应的ubuntu也不一样
如16.04对应Kinetic版本ROS;18.04对应Melodic版本ROS;20.04对应Noetic版本ROS;
6.关于catkin:一种编译系统
CMake是对make工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。
对于ROS这样大体量的平台来说,就采用的是CMake,并且ROS对CMake进行了扩展,于是便有了Catkin编译系统
catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径.(catkin_make > cmake > make)
早期的ROS编译系统是rosbuild,后来Catkin作为rosbuild的替代品被正式投入使用(rosbuild已经被逐步淘汰)
7.关于catkin_make(执行该命令时会先执行catkin_init_workspace(若之前未执行))
在新建catkin工作空间时帮我们创建了一个顶层的CMakeLists.txt文件;注意:禁止更改catkin_init_workspace后生成的CMakeLists.txt文件!因为这个文件为一个软链接文件(从图标便可看出)(https://blog.csdn.net/qq_37769337/article/details/128346481),对它进行修改将改变原文件,所有工作空间由catkin_init_worksapce创建的CMakeLists.txt都会受到影响
它会递归的寻找到当前工作空间下的所有软件包内的CMakeLists.txt依次来编译每一个软件包
这就是catkin_make命令在catkin_ws的工作空间目录下,src目录之上执行的原因
catkin_make 实际和下面的指令是等效的
$ cd ~/catkin_ws
$ cd src
$ catkin_init_workspace
$ cd ..
$ mkdir build
$ cd build
$ cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
$ make
所以最先被编译的是那个在src下的公用的CMakeList.txt文件
参考:https://blog.csdn.net/qq_25241325/article/details/80737036
8.关于find_package
${XXX_INCLUDE_DIRS}和${XXX_LIBRARIES}这两个变量是需要定义的,他们的定义是由.cmake文件完成并赋值
.cmake文件一共有两个:分别是FindXXX.cmake和XXXConfig.cmake
查找.cmake文件的两种模式(不特殊指定的话find_package执行的是Module模式)
Module模式:搜索CMAKE_MODULE_PATH指定路径下的FindXXX.cmake文件,执行该文件从而找到XXX库
给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由FindXXX.cmake模块完成
Config模式:搜索XXX_DIR指定路径下的XXXConfig.cmake文件,执行该文件从而找到XXX库
给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由XXXConfig.cmake模块完成
XXX_DIR需在Find_package之前定义,如set(Caffe_DIR PATH),PATH路径下包含的就是所需要的.cmake文件
对于find_package(catkin),其寻找的库路径作为环境变量需先执行source devel/setup.bash进行添加,才能找到对应的.cmake文件
9.关于catkin_package ------ 暂未弄明白
已知的是它会生成kgConfig.cmake文件供find_package寻找相应的库
10.关于ROS中的log日志
保存路径:默认在~/.ros/log目录下,该目录可以通过修改环境变量ROS_LOG_DIR或者ROS_HOME进行修改
1、ROS_HOME
ros默认的home路径是~/.ros,默认情况下该目录下保存log文件和test的结果文件
通过修改这个环境变量可以改变上面两个文件的保存路径。
2、ROS_LOG_DIR
该变量指向ros输出的log文件保存的目录
该变量为空时,log文件默认保存在ROS_HOME指向的目录中;
设置该变量后,输出的log文件保存在ROS_LOG_DIR指向的目录中。一般在~/.bashrc文件中设置该变量
export ROS_LOG_DIR=/home/w/桌面/log,重启终端后便将log目录设置到/home/w/桌面/log位置
11.关于ROS_INFO和ROS_INFO_STREAM
ROS_INFO(“INFO message %d”,k),相当于c中的printf;
ROS_INFO_STREAM("INFO message." << k),相当于c++中的cout;
LoggerLevel共5个级别,修改输出级别可通过命令:rqt_logger_level进行修改
问题:将节点信息输出设置为output="log"后,在log中并没有找到ROS_INFO的信息