- 博客(63)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 如何在VSCode 中采用CMake编译C++程序
当我们编译的文件比较多的时候,使用 g++ 指令进行编译的时候,还是比较繁琐的,那么这个时候就需要自己去编写一个 CMakeLists.txt 的文件,来帮助我们进行编译了。本文主要采用一些例子来说明如何进行这个操作。
2025-03-30 10:58:59
980
原创 利用PyQt简单的实现一个机器人的关节JOG界面
我们介绍了如何在Python中画出一个简单的机器人3D模型,但是有的时候我们需要通过界面去控制机器人每一个轴的转动,并实时的显示出当前机器人的关节位置和末端笛卡尔位姿。在界面中,按下 J1+, 关节1轴就会一直正向转动,松开 J1+按钮之后关节1轴就会停止运动,其他关节轴也是一样的。然后在界面的下方中还是实时的显示出机器人当前的关节角度和笛卡尔末端位姿。
2025-03-02 22:12:48
220
原创 如何在Python用Plot画出一个简单的机器人模型
在下面的程序中,首先要知道机器人的DH参数,然后计算出每一个关节的位置,最后利用 plot 函数画出关节之间的连杆就可以了,最后利用 animation 库来实现一个动画效果。
2025-03-02 22:02:52
588
原创 PTPVT 插值说明
PT模式: 位置-时间路径插值算法。PVT模式: 位置-速度-时间路径插值算法。可以使用三次多项式或者 Hermite 算法进行插值。PT算法对于点位距离比较小的运动或者低速度的运动比较合适。由于其很少的计算量,因此计算速度很快。一般可以直接用在伺服驱动器中,比如说控制器的控制周期是 1ms, 那么伺服驱动器就可以在每 1ms 内的时间间隔内使用 PT 插值,可以 1 ms 内插值16个点位,以使得运动更加的精细。PT 插值的加速度是不连续的,存在突变。
2024-12-29 20:24:49
387
原创 Python库中各种插值函数的使用
为了比较不同的插值函数,这边使用了两种数据来进行验证,一种是随机的数据,一种是从 cos 轨迹上取点进行插值。
2024-12-28 21:56:22
230
原创 # Panda3d 碰撞检测系统介绍
碰撞检测使2个物体在相撞时能够被检测出来并且做出反应,这不仅包括为碰撞事件发送消息,而且还要保证物体不会彼此穿透。碰撞检测为用户营造一种很真实的虚拟环境沉浸感(immersion),只不过该技术实现起来有点复杂。有2 种方法可以实现碰撞检测。一种是创建一些特殊的空间碰撞几何体来检测碰撞,例如球体或多边形。另一种方法是允许与任何几何体碰撞。虽然第一种更复杂,实现起来也更难,但它运行更快,是一种行之有效的解决方案。而对快速粗糙(quick-and-dirty)的应用而言,第二种几何体碰撞也是可行的。
2023-11-25 18:18:52
733
原创 Panda3d 动画序列
Panda3D 的动画序列系统是一种用于回放脚本动作的复杂机制。通过使用动画序列,您可以构建动画、声音效果或任何其他动作的复杂交互,并按需播放脚本。系统的核心是类Interval 。有几种不同类型的 Interval,将在以下几页中详细讨论,但它们都具有以下共同属性:每个 Interval 表示在特定的有限动画序列内发生的一个操作(或一系列操作)时间(因此得名)。
2023-11-15 22:32:35
641
2
原创 物理引擎介绍
虽然碰撞检测解决了防止对象在大多数应用中碰撞的问题,但某些游戏和仿真应用可能需要对对象之间的更真实的动态交互进行建模,同时考虑对象的质量、摩擦力、弹性和外力等因素。这些用途可能需要使用物理引擎。这是一个可以使用物理方程模拟物体之间相互作用的系统,考虑的参数远远超过简单的碰撞响应系统。Panda3D提供了多种用于物理的选择。但是,在选择之前,请仔细考虑是否需要物理模拟的额外复杂性、性能和创作成本,以及碰撞检测本身是否足以满足您的用例。
2023-11-15 21:34:01
273
原创 Panda3d 动画模型
Panda3D 中有两个用于 3D 几何的类:**Mode**(用于非动画几何)和**Actor**(用于动画几何)。请注意,只有当几何体改变形状时才被视为动画。例如,棒球不会被认为是动画的:它可能飞得到处都是,但它仍然是一个球体。棒球是一个**Model**,而不是**Actor**。
2023-11-15 21:28:32
682
原创 Panda3d 场景管理
许多简单的 3D 引擎维护一个 3D 模型列表,然后在每一帧对这些模型进行渲染。在这些简单的引擎中,必须分配一个3D模型(或从磁盘加载它),然后将其插入到要渲染的模型列表中。模型在插入到列表中之前对渲染器不“可见”。Panda3D稍微复杂一些。它不是维护要呈现的对象列表,而是维护要呈现的对象树。对象在插入树之前对渲染器不可见。
2023-11-11 20:52:59
1025
原创 Panda3d 介绍
Panda3D是一个3D引擎:一个用于3D渲染和游戏开发的子程序库。该库是带有一组Python绑定的c++。使用Panda3D进行游戏开发通常需要编写一个Python或c++程序来控制Panda3D库。 Panda3D是为商业游戏开发而创建的,并且仍然用于开发商业游戏。
2023-10-30 22:28:29
2610
1
原创 Panda3d 教程
偶然之余看到了 Panda3d 这个3D引擎,觉得代码开源然后又比较轻量级,感觉还是比较好上手的,因此就想去学习一下,然后把学习过程记录下来。网上也都找了不少关于Panda3d 方面的教程,但是感觉都不是很好,有的是简单的介绍,有的或者大部分都是文字的介绍,没有对应的例子或者动画来进行演示实际的效果,因此打算自己重新写这么一个相关的教程。
2023-10-30 22:06:56
2106
原创 大话如何从一个电机发展成机器人本体加机器人控制器
最近学了如何用EtherCAT IGH 控制一个电机之后,就在想如何现在距离拥有一个机器人本体和机器人控制器还有多远呢?下面的内容比较的自己的粗浅的看法,在此抛转引玉。机器人本体的设计和控制器两个随便一个单独拎出来讲,都能讲上是十天十夜都不止,每一个都是一个极其复杂的系统,都需要各位有志之士深耕多年才能做好做稳定。我在这里也只会随手一写,写出来和大家一起讨论讨论、交流交流。
2022-10-23 11:11:53
910
1
原创 EtherCAT IGH 的编译选项介绍
EtherCAT 编译选项介绍。翻译自 《EtherCAT IGH 1.52.pdf》中的 里面的表 < Table 9.1: Configuration options> 。
2022-10-19 22:10:05
1488
原创 关于ROS中Moveit中运动规划的总结资料和相关问题
1、如果要在Moveit中配置自己的运动规划库,则需要自己用源码安装Moveit和OMPL ,然后参照这个大神的资料按照步骤进行操作。2、运动规划的公开课可以参照 夕法尼亚大学Coursera运动规划公开课。3、机械臂运动规划算法性质的学习的话,需要看源码,理解move_group.plan()后moveit如何与ompl进行的交互,然后ompl如何完成的算法并将结果返回给moveit的。4...
2019-05-16 12:58:43
5216
2
原创 moveit+gazebo联合仿真问题总结
相应的配置文件和启动文件修改:在进行配置的时候,考虑到以后可能有多个机械臂进行联合仿真,或者就是为了话题之间不会进行冲突,会利用命名空间进行区分,一般而言都是用 urdf 或者 xacro 文件中的模型名字 robot(这个可以根据自己的机械臂名字进行相应的修改,这里为了描述方便) 作为 命名空间的名字,1、对自己的模型 robot 利用rosrun moveit_setup_assistat...
2019-05-15 21:42:22
3815
4
原创 个人学习笔记
1、如何利用argv传递数组#include<iostream>#include<Eigen/Eigen>using namespace Eigen;using namespace std;int main(int argc,char ** argv){ VectorXd Q(6); Q<<11,12,13,14,15,16; co...
2019-05-13 21:20:09
414
1
原创 Matlab化简机械臂正运动学表达式(采用DH矩阵推导)
我们在求解机械臂的正运动学的时候,对于在写论文的过程,我们需要对最终的位姿矩阵进行相应的化简,比如把sin(q1) 写成 S1,cos(q1) 写成 C1等等之类,之前我在处理这些表达式的时候,都是一个一个手动去替换,一个一个 ctrl+F,对于六自由度的机械臂来说真心好累。 今天我利用Matlab 中的一些基本语句实现了对位姿矩阵的自动化简。 一般在DH参数中 theta 和...
2018-12-07 19:21:38
3843
原创 Matlab T型速度规划
%% 梯形速度曲线%% 假定初始速度和最终速度为零,给定最大的加速度、运行时间、开始角度 、结束角度function trapezoid()%给定初始条件t0=0;tf=10;q0=0;qf=20;a_max=1;if a_max>= 4*(qf-q0)/(tf-t0)^2% 先判断能否求解到t_f,给定的最大加速度是否满足条件 % t_f 加速至匀速阶段的...
2018-09-25 23:05:01
4420
原创 三点求圆公式Matlab 和C++版程序
三点求圆公式Matlab 和C++版程序%% 给定三个点做圆弧轨迹规划function P_P=plot_circle(p1,p2,p3)%% 利用这三个点做一个平面方程k_11=( p1(2)-p3(2) )*( p2(3)-p3(3) ) - ( p2(2)-p3(2) )*( p1(3)-p3(3) ) ;k_12=( p2(1)-p3(1) )*( p1(3)-p3(3) )...
2018-09-25 20:42:00
4000
原创 求饶不经过原点的旋转轴的旋转矩阵
看《机器人导论》中关于齐次变换的内容中,发现饶轴旋转的时候,分为两种情况。一、饶经过原点的轴进行旋转;二、饶不经过原点的旋转轴进行旋转。其实这两种情况下,采用旋转向量 和 旋转矩阵的相互转换的几种方法 这里面的方法都是可以求到旋转矩阵的,但是这两种旋转方式中的变换矩阵中的位置矩阵是不一样的。饶经过原点的轴进行旋转的变换矩阵,由于原点的位置没有发生改变,所以变换矩阵中的位置矩阵是零,而第二种方法中...
2018-09-17 21:09:33
2433
原创 空间中位姿矩阵的插补算法代码,旋转中采用四元数进行插补
// 五次多项式生成void Five_ploynomial(double t0, double tf, double q0, double qf, double d_q0, double d_qf, double dd_q0, double dd_qf, VectorXd &amp; qt){ double A, B, C, D, E, F; A = (double...
2018-09-17 17:24:32
1738
1
原创 旋转向量 和 旋转矩阵的相互转换的几种方法
最近在做旋转向量转旋转矩阵的,尝试了几种方法,现在总结一下,方便以后使用。pi=3.1415926;qq_1= - pi/6;p1=[0.8;0.6;0.5];p2=[1;2;3];PP=p2-p1;PP=PP/sqrt( PP(1)^2 + PP(2)^2 + PP(3)^2 );%% 采用罗德里格斯公式, 需要进行单位化,不进行单位化的话,算出来的结果是不一样的R...
2018-09-17 16:11:41
10128
原创 latex biography 中作者间间距过大,如何进行设置
在用IEEE 的latex的模板进行排版的时候,经常发现作者之间的间距过大,这个时候应该如何进行调整呢?通过查阅资料发现有好几种方法。 1、重定义thebibliography环境 修改IEEEtran.cls,打开IEEEtran.cls,找到 \def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the...
2018-08-30 09:39:00
24179
7
原创 解决运行gazebo的时候,不能找到第一个关节的方法
最近在运行gazebo的仿真的时候,总是提示 cannot find “joint1” in the gazebo model。这个问题,第一、可能真的就是最近的模型中的名字写错了。在确认没有写错的情况下,那么就是需要一个bottom link 和 bottom joint来连接 base link了,添加了这两个之后,在运行程序的话,应该就是可以的了。 另外在和moveit一起使用的情况...
2018-05-31 20:36:36
1269
1
原创 如何实现rviz中的机械臂和实际的机械臂同步----ROS机械臂学习笔记(三)
利用网络和Joint States话题消息,实现仿真机械臂和实际的机械臂实现同步运动。 下位机:把和实际机械臂相连的电脑称为下位机。 上位机:装用ubuntu的电脑称为上位机。 在一篇的博客中利用joint_states发布消息,去控制机械臂, 我们利用joint states话题去发布关节状态的消息,然后rviz中的机械臂接受到相应的消息之后就会运动。现在我们在下位机中用Socket写一个...
2018-05-16 14:03:18
7201
5
原创 moveit运动规划的时候如何在rviz中添加dae场景
在听深蓝学院的《机器人操作系统ROS理论与实践》课程中,听到一个方法,用来在rviz中添加中场景,用dae的格式文件。 因为每次在打开gazebo的时候,经常需要加载一个模型,从而导致打开的时候经常会卡,所以我们可以提前下载好模型。gazebo模型下载。 这样有了下载的模型之后,我们就可以在运行moveit 的时候,导入相应的场景就可以了。 方法就是Motion Planning-&g...
2018-05-16 12:39:05
3216
3
原创 利用TCP/IP 在Simulink和M文件进行实时的数据交换
前段时间在做实验的时候,需要在Simulink中读取M文件中的数据。一般来说Simulink中的数据,只有在程序运行完之后,才会把数据存入工作区间,这个时候,如果我们需要在程序运行的过程中和Simulink交换数据,就需要采取一些其他的方法了。这个在normal模式下还是比较容易实现的, 利用下面这个语句还是很容易实现的,具体的可以参考问之前的文章,在MATLAB中采用M文件实现对Simu...
2018-04-14 13:38:06
8682
3
原创 在Simulink中利用simmechanics对三自由度的串联机械臂进行仿真
在写本科的毕业论文的时候,需要对三自由度的机械臂进行一个仿真实验。在网上查阅相关资料,得知可以利用simmechanics 来进行仿真实验。关于simmechanics 这个的介绍就百度一下就可以,这个工具可以用来做运动学仿真、求解机械臂的工作区间、也可以用来做动力学仿真。里面有各种电机模块、传感器模块。 在Simulink中利用simmechanics对三自由度的串联机械臂进行仿真其中...
2018-04-14 12:55:35
11482
12
原创 在Windows中利用socket传输double、视频、文本数据
一、传输double类型数据 server端#include <iostream>#include <winsock2.h>#pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll#pragma warning(disable:4996)#define BUF_SIZE 100using namespace...
2018-04-14 10:53:12
1886
学习 Cmake 编写的一些程序案例,可以作为参考学习用
2025-03-30
利用蚁群算法对PID参数自整定程序源代码
2018-04-14
在MATLAB中采用M文件实现对Simulink中的S函数程序实现自动调参数
2018-03-19
hash_map 自定义hash函数出错
2018-03-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人