超级终端程序Terminator的快捷键
调整分屏数量和大小
ctrl+shift+e 分屏,如果失败了,请看下面这篇文章:
【ubuntu】20.04下 Ctrl+Shift+E 无法使用 terminator 分屏问题解决
常用快捷键
VScode中工作空间的设置
- 安装ROS、Cmaketools插件。
- 在VScode中将文件添加到工作区中,注意是
~/catkin_ws/src
文件。
- 然后打开
tasks.json
文件,修改代码如下图:
- 如果代码文件中显示红色波浪线找不到库文件,可以在
c_cpp_properties.json
中添加库文件的路径。
至此,VScode中的工作空间基本设置完成。
Tips:如果遇到ros节点代码编写是语法检测误报的情况可以试试将c_cpp_properties.json
删除,然后重启VScode使一下。
ROS编程
一些基本概念
Nodes
:节点, 一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
Messages
:消息, 消息是一种ROS数据类型,用于订阅或发布到一个话题。
Topics
:话题, 节点可以发布消息到话题,也可以订阅话题以接收消息。
Master
:节点管理器, ROS名称服务 (比如帮助节点找到彼此)。
rosout
: ROS中相当于stdout/stderr。
roscore
: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
ROS客户端库允许使用不同编程语言编写的节点之间互相通信:
rospy
= python 客户端库
roscpp
= c++ 客户端库
rosjs
= javascripts客户端库
rosjava
= java客户端库
节点与包
节点(ROS程序的基本单元)类似手机里的app,每个节点实现不同的功能。
包:节点不能单独下载,需要以包为单位进行安装。包里面包含很多节点。
功能包,是ROS应用程序代码的组织单元,每个功能包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
要实现一个完整的任务需要几个功能不同的节点相互配合。
而将关联的节点装在一起的就叫包(节点容器)。
包使用Cmake进行编译。
- 创建节点
传感器通常就对应ROS里的一个节点。节点不能独立包存在,因此必须有一个上级组织,即包。
- 给节点传建一个软件包
首先cd ~/catkin_ws/src
,然后输入catkin_create_pkg
来创建相应的软件包。
具体语法为:
catkin_create_pkg <包名> <依赖项列表>
这里的依赖项是指一些通用的软件包。
完成后会生成以下文件
Tips: 常常出现的CMakeLists.txt
是一个编译相关的配置文件。
下面简单了解一下该文件中的一些内容:
双#号的是对文件指令内容的说明
单#号的是与注释对应的指令示例
package.xml
这个文件里基本上是对软件包的描述以及作者的一些信息。(这是一个catkin软件包的一个必备文件)
指令roscd
可以将终端里的当前路径中跳转到指定软件包的文件地址.
目录/opt/ros/noetic/share
里的package包和工作空间caktin_ws文件夹下的包有什么区别?
区别是通过apt下载的package包都是现成的可执行程序,而catkin_ws下的包都是源码文件,需要编译才可以运行。
节点代码编写
- 在包目录下的src中创建
.cpp
文件 - 编写代码
- 在
CMakeLists.txt
中为新建节点添加编译规则。
如添加
add_executable(${PROJECT_NAME}_node src/ssr_pkg_node.cpp) # 生成C++可执行文件
${PROJECT_NAME}
替换为包名(尽量和节点名保持一致),
src/ssr_pkg_node.cpp
是指定编译哪个cpp文件。
最后编译即可。
运行节点
顺序为:
- 编译成cpp可执行文件
- 环境参数加载(可以在
./bashrc
中添加指令suorce ~/catkin_ws/devel/setup.bash
,使得不需要每次运行前都需要加载环境) - 终端中输入
roscore
启动ros,然后新的终端输入rosrun <包名> <节点名>
Tips:可以使用Vscode来编辑.bashrc
文件。使用指令code ~/.bashrc
。
Node节点完善
- 节点初始化
ros::init()
初始化才能和ros产生链接,才能调用ros核心的功能。 - 在ros里使用while循环应该用
while(ros::ok)
,才能响应外部。问题:为什么我用while(true)在终端中 ctrl+c 也可以打断循环?
总结
创建Package和Node
- 使用
catkin_create_pkg
创建一个软件包 - 在软件包的
src
文件夹下出创建一个节点的cpp源码文件 - 在节点的源码文件中
include
包含ROS的头文件 - 构建一个main函数,并在函数的开头执行
ros::init()
初始化 - 构建while循环,循环条件为
ros::ok()
- 在
CMakeLists.txt
中设置节点源码的编译规则 - VScode中
ctrl
+shift
+b
编译运行
运行节点 - 终端中
roscore
启动ROS - 输入
rosrun <包名> <节点名>
运行节点
报错才能发现问题,解决问题才能学到新的东西:)