- 博客(41)
- 收藏
- 关注
原创 双足机器人《H1》到手体验
Tinker是国内首个开源的小型双足机器人,由华北舵狗王团队研发,旨在给开发者、教育机构、机器人团队提供强化学习在双足机器人上的落地。本人在机器人领域开发多年,关注华北舵狗王很久,非常有幸成为Tinker的第一批用户,目前打算以Tinker为基本框架,应用到自己的机器人上。以下是本人到手后后开发、测试记录。
2024-12-20 11:58:15
1118
原创 C++进阶--new 和 delete
因为在构造函数中使用 new 申请了内存,当对象过期时,对应的成员 str 也将过期,但是删除对象可以释放对象本身占用的内存,却不能释放由 new 单独申请的内存,所以必须在析构函数中释放。b.创建对象之后,将会调用构造函数,此时才会如前所述,利用构造函数为成员 str、len 分配用于保护字符串数据的内存,并将字符串的地址赋值给 str;这里首先释放了成员指针在之前指向的内存,然后复制成员数据,而不仅仅是数据的地址,并返回一个指向调用对象的引用。注意 :new 带 [],则 delete 必须带;
2023-04-14 16:18:40
2462
原创 C++进阶--virtual
是两个派生类(Bras、BrassPlus)公有的方法,只是方法实现各有不同,所以在派生类中要对这两种方法重新定义,在虚基类中不用定义;如果不是虚析构函数,因为指针 p_clients 的类型是 Brass 类,所以这里只会调用 Brass 类的析构函数;如果是虚析构函数,即使指针 p_clients 的类型是 Brass 类,这里也会调用 相应对象的析构函数;一般在虚函数中,当至少有一个纯虚函数时,这个类就叫 虚基类/抽象基类;一般会在基类中,将派生类会重新定义的函数方法,声明为。
2023-04-03 09:05:44
125
原创 深入理解计算机系统 --- 进程、线程 间通信
每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核:Linux 内核提供了不少进程间通信的机制,我们来一起瞧瞧有哪些?一、管道如果你学过 Linux 命令,那你肯定很熟悉上面命令行里的「|」竖线就是一个,它的功能是将前一个命令()的输出,作为后一个命令()的输入,从这功能描述,可以看出,如果想相互通信,我们需要创建两个管道才行。同时,我们得知上面这种管道是没有名字,所以「|」表示的管道称为,用完了就销毁。管道还有另外一个类型是。
2022-01-19 11:28:09
440
原创 深入理解计算机系统 --- UDP 实现网络通信
UDP中的服务器端和客户端没有连接UDP 不像 TCP,无需在连接状态下交换数据,因此基于 UDP 的服务器端和客户端也无需经过连接过程。也就是说,不必调用 listen() 和 accept() 函数。UDP 中只有创建套接字的过程和数据交换的过程。UDP服务器端和客户端均只需1个套接字TCP 中,套接字是一对一的关系。如要向 10 个客户端提供服务,那么除了负责监听的套接字外,还需要创建 10 套接字。但在 UDP 中,不管是服务器端还是客户端都只需要 1 个套接字。基于UDP的接收
2022-01-04 10:31:20
2137
原创 深入理解计算机系统 --- TCP 实现网络通信
1. 客户端与服务器通信 server #include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h> #include <sys/socket.h>#include <arpa/inet.h>int main(){ int sockfd = -1, clifd = -1; #第一步:
2022-01-04 09:59:55
488
原创 深入理解计算机系统 ---网络编程基础知识
1.什么是 socket?socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。我们可以通过 socket() 函数来创建一个网络连接,或者说打开一个网络文件,socket() 的返回值就是文件描述符。有了文件描述符,我们就可以使用普通的文件操作函数来传输数据了,例如:用 read() 读取从远程计算机传来的数据; 用 writ
2021-12-31 08:19:24
543
原创 深入理解计算机系统 --- 套接字接口函数
1.IP地址IP地址就是一个32位的无符号整数,存放在如下结构体中,是以 network byte order(大端模式)来进行存储的:// IP address structurestruct in_addr { uint32_t s_addr; // network byte order (big-endian)}...
2021-12-29 14:07:10
1054
原创 深入理解计算机系统 ---线程
1.常用函数创建线程pthread_t *thread //新创建的线程IDconst pthread_attr_t *attr //线程属性,默认为NULLvoid *(*start_routine) (void *)//新创建的线程从start_routine函数的地址开始运行void *arg //默认为NULL。若上述...
2021-11-30 16:01:44
784
原创 深入理解计算机系统 --- 系统级I/O
1.打开和关闭文件进程是通过调用 open 函数来打开一个已经存在的文件 或 创建一个新的文件://若成功则返回新文件描述符,失败返回-1int open(const char *pathname, int flags);pathname 是文件名,函数会将 pathname 转换为一个文件描述符,并且返回描述符数字;flags 指明进程如何访问这个文件:O_RDONLY: 只读O_WRONLY: 只写O_RDWR: ...
2021-09-18 15:37:15
217
原创 深入理解计算机系统 ---信号
1.基本概念什么是信号:信号是内容受限的一种异步通信机制(1)信号的目的:用来通信(进程与进程之间的通信)(2)信号是异步的(对比硬件中断),不确定信号到来时间和内容(3)信号本质上是int型数字编号(事先定义好的)信号由谁发出:(1)用户在终端按下按键(2)硬件异常后由操作系统内核发出信号(3)用户使用kill命令向其他进程发出信号(4)某种软件条件满足后也会发出信号,如alarm闹钟时间到会产生SIGALARM信号,向一个读端已经关闭的管道write时会产生SIG
2021-09-17 16:32:30
2243
原创 深入理解计算机系统 ---进程控制
1.创建和终止进程获取进程信息:pid_t getpid(void) //返回当前进程的 PIDpid_t getppid(void)//返回当前进程的父进程的 PID进程主要三个主要状态:运行 Running、停止 Stopped、终止 Terminated终止进程接收到一个终止信号 返回到main 调用了exit函数exit函数// 以 status 状态终止进程,0 表示正常结束,非零则是出现了错误void exit(int status)创建...
2021-09-10 14:54:32
215
原创 算法的时间复杂度的计算
前言:算法的分析方式有两种:事后分析统计方法:编写算法对应程序,统计其执行时间。 存在问题:编写程序的语言不同,执行程序的环境不同等因素 事前估算分析方法:撇开上述因素,认为算法的执行时间是问题规模n的函数。所以我们引入了时间复杂度的概念来对算法进行分析分析算法的执行时间求出算法所有原操作的执行次数(也称为频度),它是问题规模n的函数,用T(n)表示。算法执行大致时间 = 原操作所需的时间 * T(n)所以算法的执行时间与 T(n) 成正比为此用 T(n) 表示算法的执行时..
2020-08-17 23:46:01
4225
原创 数据结构C++语言版学习笔记
参考书籍:《数据结构C++语言版》邓俊辉书上都有代码示例,也能下载附加的代码直接在vs上 运行,这里我就总结下书和视频讲的的知识点,以便更高效的学习这本书。1. 向量2. 列表3. 栈与队列4. 二叉树5. 图...
2020-07-06 15:01:36
565
原创 卡尔曼滤波基础 + 姿态解算
背景 离散控制过程系统,可用一个线性随机微分方程来描述:系统状态:系统测量值: X(k)是k时刻的系统状态;U(k)是k时刻对系统的控制量;A和B是系统参数,对于多模型系统,他们为矩阵;Z(k)是k时刻的测量值,H 是测量系统的参数,对于多测量系统,H 为矩阵。W(k)、V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声(White Gaussian Noise),他们的 方差 分别是Q、R。对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪...
2020-06-26 23:55:27
5163
原创 ROS学习--第14篇:ROS机器人建模与仿真---ros_control 专题
1.概述ros_control将机器人执行器编码器的关节状态数据,和输入设定点,作为输入。它使用一个通用的控制回路反馈机制,通常是一个PID控制器,来控制发送到执行器的输出,通常是力。上图是ros_control的总体框架:Controller Manager:控制器管理器;每个机器人可能有多个controller,所以这里有一个控制器管理器的概念,提供一种通用的接口来管理不同的co...
2019-06-16 22:20:52
3933
4
原创 ROS学习--第13篇:ROS机器人建模与仿真---在Gazebo中使用URDF
请下载URDF模拟包保存到 ~/catkin_ws/src:https://github.com/ros/urdf_sim_tutorial下载完成后编译下工作空间:wdd@Linux:~/catkin_ws$ catkin_make我们可以使用 gazebo.launch 在 gazebo 中生成我们已经创建的模型:roslaunch urdf_sim_tutorial ...
2019-06-05 17:31:44
6147
7
原创 ROS学习--第12篇:ROS机器人建模与仿真---使用xacro简化URDF文件
使用Xacro包来简化URDF。它做了三件非常有用的事情: 常量 简单数学 宏 在本教程中,我们将查看所有这些快捷方式,以帮助减小URDF文件的总体大小,并使其更易于读取和维护。使用 Xacro顾名思义,xacro是一种宏语言(macro language)。xacro程序(xacro program)运行所有宏并输出结果。典型用法如下:...
2019-06-04 18:51:19
2593
原创 ROS学习--第11篇:ROS机器人建模与仿真---向URDF模型添加 物理属性 和 碰撞属性
打开07-physics.urdf ,以 base_link 为例<link name="base_link"> <visual> <geometry> <cylinder length="0.6" radius="0.2"/> </geometry> <mater...
2019-06-02 23:43:48
5271
原创 ROS学习--第10篇:ROS机器人建模与仿真---建立移动机器人模型
在本教程中,我们将修改在上一个教程中创建的模型,使其具有可移动的关节。在之前的模型中,所有的关节都是固定的(fixed)。现在我们将探讨另外三种重要类型的关节:旋转关节(continuous)、转动关节(revolute)、棱柱关节(prismatic)。打开 06-flexible.urdf,这里我们选三个关节作为代表讲解:1.<joint name="head_swivel...
2019-06-02 22:02:06
10613
2
原创 ROS学习--第9篇:ROS机器人建模与仿真---从头构建视觉机器人模型
首先下载urdf_tutorial功能包,下面都是以这个功能包为基础:https://github.com/ros/urdf_tutorial下载后解压到 ~/catkin_ws/src 文件下在 /catkin_ws/src/urdf_tutorial-master/urdf 中,我们可以看到很多urdf文件。1.打开01-myfirst.urdf可以看到,这里用visual...
2019-05-29 22:44:11
5122
原创 ROS学习--第8篇:ROS机器人建模与仿真---URDF文件学习
1.URDF定义标准机器人描述(URDF)是种用于描述机器人机器结构、关节、自由度等的XML格式文件。2.创建一个URDF文件下面创建一个简单的四轮驱动小车模型(1)首先创建一个机器人建模功能包:cd ~/catkin_ws/srccatkin_create_pkg testbot_description urdf xacro返回catkin_ws 编译功能包...
2019-05-23 15:01:35
4328
原创 ROS学习--第7篇:ROS基础---常用工具简介
1.启动文件 roslaunchroslaunch可以用来启动定义在launch文件中的多个节点。用法:roslaunch [package] [filename.launch]例如:在 ~/catkin_ws/src/learning_communication 目录下,建立一个名为 launch 的文件夹然后在这个文件夹里面建一个名为learning_communi...
2019-05-20 21:59:33
2108
原创 ROS学习--第6篇:ROS基础---服务(service)编程
本次我们将创建一个简单的service节点("add_two_ints_server"),该节点将接收到两个整形数字,并返回它们的和。先在 catkin_ws/src/learning_communication/src功能包下建两个 .cpp 文件,分别命名add_two_ints_server.cpp 、add_two_ints_client.cpp(1)编写Service节点打...
2019-05-17 23:12:28
13189
18
原创 ROS学习--第5篇:ROS基础---话题(topic)编程
本次创建两个节点,一个收,一个发。先在 catkin_ws/src/learning_communication/src功能包下建两个 .cpp 文件,分别命名talker.cpp 、listener.cpp(1)编写发布器节点打开talker.cpp文件,复制如下内容/** * 该例程将发布chatter话题,消息类型String */ #include <ss...
2019-05-17 22:27:05
4705
原创 ROS学习--第4篇:ROS基础---创建ROS消息和ROS服务
1.创建一个自定义消息 msg(1)在 catkin_ws/src/learning_communication 文件中,创建一个文件夹,命名为 msg,在这个msg文件夹里面,创建一个 .msg 文件,命名为msg.msg(2)打开msg.msg,复制如下内容,当然,你可以仿造上面的形式多增加几行以得到更为复杂的消息int64 numstring first_namestri...
2019-05-16 17:12:55
4266
9
原创 ROS学习--第3篇:ROS基础---创建工作空间
1.创建工作空间 catkin_ws创建src文件,放置功能包源码:mkdir -p ~/catkin_ws/src进入src文件夹:cd ~/catkin_ws/src初始化文件夹: catkin_init_workspace这样就在src文件中创建了一个CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。2.编译工作空间 ca...
2019-05-15 15:44:25
69819
17
原创 ROS学习--第2篇:ROS小海龟历程初探
1.启动ROSroscore2.启动小海龟节点重新打开一个终端,输入rosrun turtlesim turtlesim_node rosrun:启动一个新节点;turtlesim:功能包turtlesim_node:功能包下的一个节点如下图所示出来一个小海龟的界面3.启动键盘控制节点重新打开一个终端,输入rosrun turtlesim tu...
2019-05-13 23:05:00
15628
14
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人