ROS发布订阅模型编程实现
准备工作
$ cd <work_space>/src
$ catkin_create_pkg learning_topic std_msgs roscpp geometry_msgs turtlesim
$ cd learning_topic/src
# 在此目录下创建两个文件,填充后续 publisher 和 subscriber 章节的内容
$ touch velocity_publisher.cpp pose_subscriber.cpp
Publisher
/***********************************************************************
Copyright 2020 GuYueHome (www...
ROS创建功能包
Create Package
# 创建工作空间
$ mkdir -p learning_ros/src && cd learning_ros/src
# 创建功能包
$ catkin_create_pkg <pkg_name> <pkg_dependency1> <pkg_dependency2> ... <pkg_dependencyn>
$ catkin_create_pkg test_pkg std_msgs roscpp
# 编译
$ catkin_make
# 查看当前的环境变量 ROS_PACKAGE_PATH
$ echo $ROS_PACKAGE_PATH
> /opt/ros/melodic/sh...
点云多帧可视化
首先参考点云单帧可视化: 使用numpy进行读取数据与使用python_pcl进行可视化 这一章节
使用python-pcl实现多帧
import numpy as np
import pcl.pcl_visualization
import time
# 创建管理可视化的类
visual = pcl.pcl_visualization.CloudViewing()
# 点云bin文件所在的目录
bin_path= "path_to_dir_which_includes_bin_files"
flag = True
while flag:
for root, dirs, files in os.walk(bin_path):
for file in fiels: ...
ROS基础知识
ROS基础知识
通信机制
话题使用编程语言无关的 .msg 文件定义 类型和数据结构 用于传输数据
服务使用编程语言无关的 .rsv 文件定义 类型和数据结构 用于传输数据
node – 执行单元
执行具体任务的执行单元,可以分布式运行在不同的主机,由不同的编程语言实现。名称必须唯一。
ros master – 节点管理器
为节点提供命名和注册服务
跟踪和记录话题/服务通信,辅助节点相互查找、建立连接。
提供参数服务器,由所有节点共享。适合存储一些静态、非二进制的配置参数
文件系统
功能包:ros基本单元,包含节点源码、配置文件、数据定义等
功能包清单:记录功能包的基本信息
元(综合)功能包:组织用于同一目的的功能...
安装任意版本app
安装任意版本app
查找历史版本
在终端输入并得到如下信息,默认是最新的版本。
$ brew info XXX
# 例如
$ brew info baidunetdisk # 百度网盘
>brew info baidunetdisk
baidunetdisk: 4.4.1
https://pan.baidu.com/download
/opt/homebrew/Caskroom/baidunetdisk/4.4.1 (130B)
From: https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/baidunetdisk.rb
==> Names
Baidu NetDisk
百度网盘
==> Des...
线程创建回收分离
线程的创建、回收、分离
当一个程序启动后,就会新建一个进程。若此时创建了一个新的==子==线程,原来的进程会==退化成主线程==。
创建线程
构造函数原型
public:
// ① 默认构造函数
thread() noexcept;
// ② 移动构造函数
thread( thread&& other) noexcept;
// ③ 创建线程对象,可以指定任务函数f和参数列表
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args);
private:
// ④ 私有的...
C++的traits技术
对于自定义的结构体,如果需要作为要求元素是可哈希的容器的元素,那么就需要自定义hash函数。STL中这样的容器有:std::unordered_map、std::unordered_set、std::unordered_multimap、std::unordered_multiset。
线程概念和原理
线程概念和原理
Linux操作系统是基于进程实现的,后面看到windows线程玩的6,借鉴其概念用进程实现了线程,所以Linux里面是伪线程,即轻量级的进程。
进程拥有独立的地址空间,线程共享部分地址空间(合租)
(合租)多线程省资源,上下文切换快(屋内串门)
独享(牙刷牙杯):栈区(stack)、cpu寄存器(由内核管理)
共享:代码段(.text段)、堆区(heap)、全局数据区(.bss段、.data段)、打开的文件等
进程是分配资源的最小单位,线程是执行的最小单元
Q:创建多少个线程线率最高?
A:IO较多时,2倍CPU核;计算复杂度高时,等于CPU核。
参考资料
linux教程by爱...
交叉编译snpe&&grpc记录
笔者从这个工作开始接触 cmake ,期间踩了不少坑,现在也算是成功达到了半吊子的水平。
整理了几篇笔记之后,觉得有些零散。因此借由这篇详尽的例子,做到理论和实际相结合。
交叉编译 SNPE
由于本组项目需要,受限于硬件无法接显示屏,数据可视化需要借助 protobuf 做成标准格式,而后通过 grpc 远程调用显示。在本机进行开发时,就需要交叉编译生成可执行文件到 arm 板子上运行。
交叉编译 grpc
依据2022.08.25--[grpc官方库](https://github.com/grpc/grpc/blob/master/test/distrib/cpp/run_distrib_test_cmake_aarch64_cross.sh)脚本59行~62行可知,在交...
114 post articles, 12 pages.