WSL2 安装 ROS2

WSL2 使用的系统是 Ubuntu 24.04 ,所以安装的 ROS2 版本对应为 jazzy

UTF8 环境设置

1
2
3
sudo apt update && sudo apt install locales
sudo locale-gen zh_CN zh_CN.UTF-8
sudo update-locale LC_ALL=zh_CN.UTF-8 LANG=zh_CN.UTF-8

激活软件仓库

1
2
sudo apt install software-properties-common
sudo add-apt-repository universe

使用国内源

1
2
3
4
# 安装证书
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://mirrors.ustc.edu.cn/ros2/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/ros2.sources > /dev/null

安装 ROS2 开发工具

1
sudo apt update && sudo apt install ros-dev-tools

安装 ROS2

1
sudo apt update && sudo apt upgrade && sudo apt install ros-jazzy-desktop

运行例子

  1. 发布者
    1
    2
    
    source /opt/ros/jazzy/setup.bash
    ros2 run demo_nodes_cpp talker
    发布者打印的消息
    1
    2
    3
    
    [INFO] [1766678416.648218277] [talker]: Publishing: 'Hello World: 1'
    [INFO] [1766678417.642466793] [talker]: Publishing: 'Hello World: 2'
    [INFO] [1766678418.638927732] [talker]: Publishing: 'Hello World: 3'
  1. 订阅者
    1
    2
    
    source /opt/ros/jazzy/setup.bash
    ros2 run demo_nodes_py listener
    订阅者打印的日志
    1
    2
    3
    
    [INFO] [1766678417.643847384] [listener]: I heard: [Hello World: 1]
    [INFO] [1766678418.640908725] [listener]: I heard: [Hello World: 2]
    [INFO] [1766678419.637684973] [listener]: I heard: [Hello World: 3]

Windows Terminal 标签

添加一个新的 Windows Terminal 标签,方便快速打开 ROS2 环境,命令行如下:

SQL 基础

查询

查询步骤:

  1. 选择要查询的库 USE db
  2. 使用 SELECT 语句

基本语句:

  • SELECT 查询的列
  • FROM 查询的表
  • WHERE 筛选条件
  • ORDER BY 排序条件
1
2
USE sql_store;
SELECT customer_id, first_name FROM customers WHERE customer_id = 1 ORDER BY first_name;
customer_idfirst_name
1Babara

SELECT 子句

选择查询的列, * 表示查询所有列

C++ 20协程的使用

协程概念参考 协程的概念及实现 ,C++ 20 的协程为无栈协程

协程语法

定义协程

C++20 将以下三种函数当成协程

  1. co_await 表达式

  2. co_yield 表达式

  3. co_return 表达式

协程约束:

  • 参数不能为可变参数
  • 不能有 return 表达式
  • 不能为常量函数
  • 不能为构造函数,析构函数和 main 函数

协程的执行

一个协程涉及以下对象:

协程的概念及实现

协程概念

协程是计算机程序的一类组件,允许执行被挂起和恢复。

协程与函数比较

  • 函数只有一个入口点和出口点;协程有多个
  • 函数可以调用其它函数,调用者等待被调用者结束后继续执行 ,生命周期遵循后进先出;协程的生命周期有他们的使用需要来决定
  • 函数一次性返回全部结果;协程可以每次返回部分结果,这种协程称为生成器

协程有多个入口点,执行过程过

性能优化-函数性能度量及分析工具

问题

度量下面累加程序的性能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <vector>
#include <random>
#include <limits>

using namespace std;

int64_t Accumulate(vector<int64_t>& arr)
{
    int64_t sum = 0;
    for (int i = 0; i < arr.size(); i++) {
        sum += arr[i];
    }
    return sum;
}

vector<int64_t> RandGenerator(int n)
{
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<> distrib(numeric_limits<int32_t>::min(), numeric_limits<int32_t>::max());

    vector<int64_t> ans(n);
    for (int i = 0; i < ans.size(); i++) {
        ans[i] = distrib(gen);
    }
    return ans;
}

int main(int argc, char* argv[]) {

    auto arr = RandGenerator(1'000'000'000);

    auto sum = Accumulate(arr);


    return 0;
}

程序运行时间

最直观的度量方法就是程序运行的时间,可以使用 C++ 标准库 <chrono> 中的 high_resolution_clock 来测量。