- 博客(10)
- 收藏
- 关注
原创 linux下的条件变量
条件变量这里感觉有点抽象,后面问了问deepseek后可以用一种较通俗易懂的方式理解了。函数pthread_cond_init用于初始化用于销毁条件变量条件变量要和一个互斥锁mutex搭配使用。线程调用这个函数后,会被阻塞在该函数这里。如果这把锁是锁着的则会打开mutex这把锁。被阻塞的线程只有调用如下两个函数才会解除阻塞:下面是pthread_cond_wait函数内部执行过程的伪代码:当调用wait后,线程立即释放与条件变量搭配使用的锁,并让其阻塞在该条件变量
2025-05-01 21:38:14
295
原创 linux下的读写锁
读写锁的用法和互斥锁差不太多。当系统中线程全部都是写操作时,读写锁就退化成了普通的互斥锁。当系统中线程全部都进行读操作时,他们的读操作都会是并行的。相比于互斥锁,有读线程存在时,读写锁可以提高效率。
2025-05-01 11:23:30
168
原创 linux下的线程同步:互斥锁
假设有两个线程不加约束地对一个共享变量进行访问会有怎样的后果?这里myCallback1线程和myCallback2线程打算各对num加50次。但是,如果线程myCallback1在执行tmp = num后,myCallback2抢走CPU,也执行了这条语句,那么它就只能通过tmp自增一次而不是两次。为了不让线程同时访问到临界资源num,我们需要让它们“互斥”访问。
2025-04-30 16:58:44
238
原创 linux下的线程
线程是轻量级的进程,在linux环境下,它的本质仍然是进程。操作系统会以进程为单位分配分配资源。总的来说,进程是分配资源的最小单位,而线程是操作系统进行调度的最小单位。
2025-04-30 10:19:07
645
原创 ROS自定义消息类型
首先在工作目录的src目录下创建一个test_msgs包,依赖项除了roscpp rospy std_msgs以外,还有message_generation message_runtime,这两个是消息包生成的依赖项。然后在test_msgs下创建一msg文件夹。假设我们要描述的对象是一个worker,我们需要在msg文件夹下创建一个消息类型文件,在该文件中定义我们自定义的消息结构,格式如下:(数据类型+变量名),数据类型也可以用其他包的数据类型。
2025-01-20 21:57:07
1419
原创 ROS中的IMU惯性测量单元
我们需要先计算目标朝向与当前朝向的差值,使用速度消息包设定机器人的绕Z轴的角速度为角度差的%1。其余的covariance字段均为对应的float64的协方差矩阵,如果某项数据不可用,将对应协方差矩阵的第一个元素设为-1。协方差矩阵可用于加权不同来源的数据,赋予精度更高的数据更大的权重,这里我们暂时用不到。这里我们需要一个gazebo仿真环境,可以去b站的机器人工匠阿杰的ROS教程找到,我的ROS入门相关的文章也是在他的视频基础上总结的。orientation:表示IMU的姿态,采用四元数的形式。
2025-01-18 21:31:39
549
原创 ROS中的launch文件—批量启动ROS节点
当我们使用指令启动launch文件时,会自动对指定的软件包的目录遍历搜索。这里有一个疑问,launch文件的name和节点的cpp文件里的ros::init函数的第三个参数我不知道有什么区别,我问chatgpt说的是它们都用于指定节点名称,但。pkg="包名" type="要执行节点的可执行文件的名称(catkin_make构建的结果)" name="运行时给节点起的名字"我认为我们可以启动多个节点,这些节点运行的是同一份节点代码,只要name别重复就行。的文件,在ROS中我们用它来批量启动ROS节点。
2025-01-14 16:53:12
338
原创 如何给VIM安装插件
写好后,wq保存,重新打开vimrc并在当前vimrc下执行:PlugInstall即可安装。此时vimrc是新创建的文件,是空的。其实有非常多的类似的插件可供选择,高版本的vim也有此功能。注:安装可能需要科学上网。
2025-01-10 16:15:37
591
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人