ROS学习笔记(二)

本文介绍了如何在Ubuntu上使用Terminator的快捷键进行分屏操作,以及在VScode中设置ROS开发环境,包括安装插件、工作空间配置、ROS基本概念和编程技巧,如包、节点、消息、主题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超级终端程序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文件。
最后编译即可。

运行节点

顺序为:

  1. 编译成cpp可执行文件
  2. 环境参数加载(可以在./bashrc 中添加指令suorce ~/catkin_ws/devel/setup.bash,使得不需要每次运行前都需要加载环境)
  3. 终端中输入 roscore 启动ros,然后新的终端输入rosrun <包名> <节点名>
    Tips:可以使用Vscode来编辑.bashrc文件。使用指令code ~/.bashrc

Node节点完善

  1. 节点初始化 ros::init() 初始化才能和ros产生链接,才能调用ros核心的功能。
  2. 在ros里使用while循环应该用while(ros::ok),才能响应外部。问题:为什么我用while(true)在终端中 ctrl+c 也可以打断循环?

总结

创建Package和Node

  1. 使用catkin_create_pkg创建一个软件包
  2. 在软件包的src文件夹下出创建一个节点的cpp源码文件
  3. 在节点的源码文件中include包含ROS的头文件
  4. 构建一个main函数,并在函数的开头执行 ros::init() 初始化
  5. 构建while循环,循环条件为ros::ok()
  6. CMakeLists.txt中设置节点源码的编译规则
  7. VScode中ctrl+shift+b编译运行
    运行节点
  8. 终端中roscore启动ROS
  9. 输入 rosrun <包名> <节点名> 运行节点

报错才能发现问题,解决问题才能学到新的东西:)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值