ros1

ros命名空间

由浅到深理解ROS(3)-命名空间 - jason来自星星 - 博客园

ros2

名词解释

abi

是二进制接口
详细讲解

api

是编程的接口

cli

命令行界面(Command Line Interface)

tui

终端用户界面(Terminal User Interface)
也就是在cli的基础上添加了点图形化的东西,更好看

colcon

可以理解成ros1中的catkin,编译的工具

oop

面向对象编程
也就是说在写程序前,要先想好些什么类,生成一个什么样的对象,这个对象需要什么功能,有什么作用。把这些需求集中在类中

pop

面向过程编程

需要啥功能写啥函数

基础知识

python

ros2中面向过程编程

1
2
3
4
5
6
7
8
9
10
11
import rclpy

from rclpy.node import Node


def main(args=None):
rclpy.init(args=args)
node=Node("li4")
node.get_logger().info("Hello World")
rclpy.spin(node)
rclpy.shutdown()

ros2中面向对象编程

父类
class WriterNode(Node):
这表示writerNode的父类是Node

1
2
3
4
5
class WriterNode(Node): 
""" 创建一个作家节点,并在初始化时输出一个话 """
def __init__(self,name):
super().__init__(name)
self.get_logger().info("大家好,我是%s,我是一名作家!" % name)

这里的super()是指父类,这里表示父类初始化。
就相当于上面的 node=Node("li4")

c++

rclcpp中的智能指针

这里的智能指针和c++stl库里面的智能指针道理是一样的,都是为了避免内存泄漏,能够在作用周期结束后自动释放相关资源。

创建订阅节点

1
2
rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_;
sub_ = this->create_subscription<std_msgs::msg::String>("sexy_girl", 10, std::bind(&SingleDogNode::topic_callback, this, _1));

这里详细解释一下
creat_subscription使用来创建话题订阅者,这里表示王二订阅书。
("sexy_girl", 10, std::bind(&SingleDogNode::topic_callback, this, _1))
这里面的sexy_girl表示的是要订阅什么话题,10表示频率,而后面的是用来绑定回调函数。将当前对象和topic_callback绑定,_1是占位符,也就是说当你不确定callback的数据类型的时候,可以选择只用一个占位符。他只是表示topic—callback的第一个参数的位置

创建发布节点

1
2
rclcpp::Publisher<std_msgs::msg::UInt32>::SharedPtr pub_;
pub_ = this->create_publisher<std_msgs::msg::UInt32>("sexy_girl_money",10);

不编译某个包

1
colcon build --packages-select YOUR_PKG_NAME  --cmake-args -DBUILD_TESTING=0

允许通过更改src下的部分文件来改变install(重要)

每次调整 python 脚本时都不必重新build了

1
colcon build --symlink-install

加强记忆

  • msg文件开头首字母一定要大写,ROS2强制要求,原因小鱼盲猜应该是为了和类名保持一致

服务通信

实现方法

使用多线程执行器和回调组来实现多线程

题外话

rtos

实时操作系统(Real-time operating system, RTOS)
(tensorflowboys=tfboys)