1.Linux基本命令
$ ls #列出当前目录下的文件
$ ls -a #列出当前目录所有文件,包括隐藏的文件
$ mkdir directory #创建名为directory的目录
$ cd directory #改变目录进入directory
$ cd . #当前目录
$ cd .. #父目录
$ pwd #打印绝对路径
$ cd ~ #家目录
$ cp file1 file2 #复制file1并将其命名为file2
$ mv file1 file2 #将file1移动并重命名为file2
$ rm #删除文件
$ rmdir #删除目录
$ clear #清屏
$ cat file #显示文件内容
$ less file #一次显示一个页面的文件(q退出,'/'+内容,可以搜索)
$ head #显示文件前10行
$ tail #显示文件尾10行
$ grep text text.txt #在text.txt中搜索文字,区分大小写
$ grep -i text text.txt #不区分大小写搜索文字
$ grep -i 'word' text.txt #不区分大小写搜索'word'
$ -v #反选
$ -n #在选中的行前显示行号
$ -c #打印选中的总的行数
$ grep -ivc text text.txt #不含text或者text的行数
$ wc #计算单词数(word count)
$ wc -w text.txt #计算文本里的字数(不是字节数)
$ wc -l text.txt #计算文本里的行数
$ cat #重定向输出(本来是输出到终端,现在输出到文本中)
$ Cat > list1 #添加到list1,会覆盖原来的内容
$ cat >>list1 #添加到list1,不会覆盖原来的内容
$ cat list1 list2 > biglist #将list1和list2的内容合并到biglist
$ sort #重定向输入(本来是在键盘输入,现在可以利用一个文件当做输入)
$ sort < biglist #将biglist打印到屏幕
$ sort < biglist > slist #输出到slist
$ who #查看系统上有哪些用户
$ pipe #管道(管道可以连接两个命令,将前一个命令的输出数据当做到后一个命令的输入,管道符号为 |(shift+\))
$ who | wc -l ##显示登录了多少用户
$ * #通配符
$ ls *.txt #列出所有txt格式的文件
$ ? #匹配一个字符(比如?ouse会匹配house或者mouse而不是grouse)
$ whatis wc #显示wc的单行的帮助,省略选项等其他信息。命名文件和目录的时候尽量不要使用空格,应使用字母,数字,字符(即_)和.(句点)。不要使用有特殊含义的字符。文件名以字母开头后面跟 . 再跟表示文件类型的字母。如C程序,以 .c结尾。这样查找所有C文件时,只要输入ls *.c就可以。
$ man wc #显示详细的帮助文档
$ apropos keyword #打印出所有含有关键字的命令
$ ls-l #列出目录信息,如 -rwxrw-r-- 1 ee51ab beng95 2450 Sept29 11:52 file1 ;从左到右,第一个字符是文档属性,然后是三组共九个权限,分别是拥有者、用户组、其他用户的读(r)、写(w)、执行(x)的权限,没有权限用'-'代替,之后是用户名,用户组名,文件大小,创建时间和文件名。
$ chmod #改变权限
$ chmod a+rw biglist #将biglist的读写权限授予所有人
$ quota #显示磁盘使用情况和限额
$ df . #显示文件系统的剩余空间
$ du #显示每个子目录使用的kb数。常用来查看哪个文件最大
$ ps #查看进程
$ & #后台运行命令
$ sleep #等待
$ sleep 10 & #后台等待10秒,可用ctrl+z暂停一个进程,然后用bg使它在后台运行
$ jobs #查看暂停或者在后台运行的进程
$ fg %jobnumber #激活暂停的进程
$ fg #只输入fg则激活最近暂停的进程
$ kill %jobnumber #用jobnumber杀死进程
$ kill [PID号] #用进程编号杀死进程
$ kill -9 [PID号] #强制杀死进程
$ gzip #压缩
$ gunzip #解压
$ zcat #阅读压缩的文件内容,无需解压
$ file #根据数据类型对文件进行分类
$ diff #比较两个文件内容并显示差异
$ find #查找
$ find -name "*.txt" -print #从当前目录开始,遍历所有目录,查询以.txt为扩展名的文件,然后将文件名称打印到屏幕上
$ find -size +1M -ls #查找大小大于1M的文件,并将其结果显示为长列表。
$ history #显示输入的历史命令
$ !! #重新调用上一个命令
$ !-3 #重新调用倒数第三个命令
$ !5 #重新调用第五个命令
$ !grep #重新调用以grep开头的命令
2.ROS命令
2.1 功能包
2.1.1 安装功能包(通过apt-get)
$ sudo apt-get install package-name #安装软件包package-name
2.1.2 功能包创建与编译
2.1.2.1 创建
$ cd ~/catkin_ws/src #进入workspace
$ catkin_create_pkg package-name #创建一个存放功能包的目录,并在其下生成两个配置文件,分别为package.xml和CMakeLists.txt
2.1.2.2 写程序(C++)
#include <ros / ros.h>
int main(int argc, char ** argv){
ros::init(argc, argv, "hello_ros"); //初始化ROS系统
ros::NodeHandle nh; //将该程序设置为ROS节点(节点句柄)
ROS_INFO_STREAM("Hello, ROS!"); //以日志消息的形式输出
}
注:NodeHandle 类维护一个引用计数,仅仅在第一个NodeHandle 对象创建时才会在节点管理器注册新的节点。同样,只有当所有的 NodeHandle 对象都销毁后,节点才会注销。
2.1.2.3 声明
声明依赖库:编辑包目录下的 CMakeLists.txt 文件
find_package(catkin REQUIRED COMPONENTS roscpp) #添加roscpp依赖库以执行C++文件
#在包的清单文件中列出依赖库
<build_depend>package-name</build_depend> #编译依赖
<run_depend>package-name</run_depend> #运行依赖
声明可执行文件:在CMakeLists.txt文件中添加两行
add_executable(executable-name source-files) #声明可执行文件的文件名,以及生成此可执行文件所需的源文件列表
target_link_libraries(executable-name ${catkin_LIBRARIES}) #告诉Cmake当链接此可执行文件时需要链接哪些库(在上面的 find_package 中定义)
2.1.2.4 编译
$ cd ~/catkin_ws #回到工作区目录
$ catkin_make #编译所有包中的可执行文件
$ source devel/setup.bash #执行setup.bash脚本文件
setup.bash是catkin_make 在工作区的 devel 子目录下生成的。这个自动生成的脚本文件设置了若干环境变量,从而使 ROS 能够找到所创建的功能包和新生成的可执行文件。
注:大部分功能包( 已经更新为使用新的 catkin 编译构建系统的功能包 )编译产生的可执行文件并未存放在功能包目录下,而是存放在一个单独的标准化目录层次结构中。对于使用 apt-get 安装的功能包,其所在根目录为/opt/ros/melodic。可执行文件存储在这个根目录下的 lib 子目录里。
2.1.3 功能包操作
$ rospack package-name #获取软件包package-name的信息
$ rospack list #获取所有已安装的ROS软件包列表清单
$ rospack find package-name #寻找软件包package-name所在的目录
$ rosls package-name #查看软件包package-name目录下的文件
$ roscd package-name #将当前目录切换至package-name软件包目录
2.2 节点
2.2.1 节点运行
$ roscore #启动节点管理器
$ rosrun package-name executable-name #启动节点/运行ROS程序
2.2.2 节点操作
$ rosnode info node-name #这个命令的输出包括话题列表、服务列表、其Linux 进程标识(process identifier,PID)以及与其他节点的所有连接
$ rosnode kill node-name #终止节点
$ rosnode list #获得运行节点列表
注:在运行节点列表中通常会出现" /rosout ",rosout 节点是一个特殊的节点,通过 roscore 自动启动,其作用类似于控制台程序中使用的标准输出(即 std::cout)。
2.2.3 节点通信
$ rqt_graph #图像显示节点之间的发布-订阅关系(rqt_graph本身就是一个节点)
$ rostopic echo topic-name #查看话题发布的消息
$ rostopic hz topic-name #测量消息发布的频率
$ rostopic bw topic-name #测量发布消息所占用的带宽
$ rostopic info topic-name #获取更多关于话题的信息,包括消息类型及发布者订阅者
$ rosmsg show message-type-name #查看消息类型的详情
$ rostopic pub –r rate-in-hz topic-name message-type message-content #用命令行手动发布消息,其中message-content应该按顺序提供消息类型中所有域的参数值,例如rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ’[2,0,0]’ ’[0,0,0]’
注:所有的节点发布都向话题/rosout 发布消息,该话题由同名的 /rosout 节点订阅,这个话题用来生成各个节点的文本日志消息。
注:每条消息类型都属于一个特定的包。消息类型名总会包含一个斜杠,斜杠前面的名字是包含它的包: package-name/type-name,这样把包的名字包含在消息类型名里能避免命名冲突。
*2.2.4 问题检查
$ roswtf #进行全面而深入的检测,包括检测环境变量、安装的文件以及运行的节点
#例如,roswtf将会检测在安装过程中rosdep初始化是否完成,任何节点是否出现了意外的挂起或者终止,以及活跃节点是否正确地和其他节点相连接等