<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sufukang12的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sufukang12</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sufukang12]]></copyright><item><title><![CDATA[关于moveit会出现的报错问题]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/142168380</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/142168380</guid><author>sufukang12</author><pubDate>Thu, 12 Sep 2024 10:44:45 +0800</pubDate><description><![CDATA[这是因为：机器人的moveit::planning_interface与move_group_interface不完全相同，当使用官方的demo文件的时候默认是panda_arm机械臂，但是官网给的c++代码并不是panda_arm，而是manipulator。如果大家不确定自己的是什么机械臂可以运行rviz的demo文件进行查看，将manipulator进行替换即可。官方的demo为panda_arm。]]></description><category></category></item><item><title><![CDATA[QT与ros2的如何通过ui控制后台运行python节点]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/140404222</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/140404222</guid><author>sufukang12</author><pubDate>Mon, 15 Jul 2024 11:14:10 +0800</pubDate><description><![CDATA[在ROS2中，一般都需要通过 ros2 run 指令或 ros2 launch指令去完成节点的运行，那么我可不可以通过ui界面去控制节点的开始与关闭呢？第一步先创建了一个CommandExecutor.h类，该类可以在后台进行，通过对后台的命令符号进行处理，便可以直接对终端可操作的内容进行操作。但是在主页面回调函数，需要对原来的节点进行关闭，切记一定要sleep（1），这样有时间可以去关闭，如果没有他会在后台一直执行。点击x号关闭（2）：同时也会这样关闭这些信号（但是要记得加延时）]]></description><category></category></item><item><title><![CDATA[关于QT多线程与ROS2通讯并在ui显示与节点的继承（3.2）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/140136342</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/140136342</guid><author>sufukang12</author><pubDate>Tue, 02 Jul 2024 21:41:42 +0800</pubDate><description><![CDATA[1.为了保证node节点具有connect功能，我们这边传的参数必须是已经继承好Qobject的类的共享指针，同时将node_(node)实例化，方便后续的处理。在这个例子中我实现了，一个通讯节点的类，同时我在另外一个类中实现了子线程的使用，并且在主窗口进行了实现。首先先写.h文件，一定要记住该类一定要既要继承node而且也要继承QObject！这个写到按键的connect里面，否则是没有办法找到rosworker这个对象的。同时也是支持关闭的：并不会影响主线程的运行。]]></description><category></category></item><item><title><![CDATA[关于QT多线程应用与ROS2的topic通讯（3.1）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/140108073</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/140108073</guid><author>sufukang12</author><pubDate>Mon, 01 Jul 2024 19:23:29 +0800</pubDate><description><![CDATA[在mainwindow的使用 ：（这里一定要注意！rclcpp：：init（）与rclcpp：：shutdown（）成对出现！因此为了避免重复初始化以及重复关闭情况所以需要用if进行判断，从而方式程序崩溃）因为，在主线程执行spin的时候会阻塞，所以我们想要通过多线程解决这个问题，同时可以通过主线程按键信号去控制话题的同断。然后点击关闭节点（疯狂点击也不会崩溃！随后为了使得这个节点可可以在子线程中运行，因此我们创立一个子线程的运行空间。可以正常通讯(这时候疯狂点击也不会出现崩溃现象！]]></description><category></category></item><item><title><![CDATA[QT与ROS2的cmake配置（2番外篇）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/139996582</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/139996582</guid><author>sufukang12</author><pubDate>Wed, 26 Jun 2024 19:10:22 +0800</pubDate><description><![CDATA[【代码】QT与ROS2的cmake配置。]]></description><category></category></item><item><title><![CDATA[QT配置ROS一些小问题（2）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/139699278</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/139699278</guid><author>sufukang12</author><pubDate>Sat, 15 Jun 2024 11:48:11 +0800</pubDate><description><![CDATA[我不使用QT自带的包创建工具去创建，还是使用原本的ROS2的创建包工具在该工作空间的src目录下自己创建。（QT只不过是个载体，无所谓用什么方法去创建包，大家不要纠结用什么办法去创建包）（为了演示我只写了cpp文件，如果是自己项目的话，建议大家还是吧.h和.cpp分开写）但是我会有个问题：一旦使用QT自己的package去创建包的话大概率会创建失败（我没找到解决办法）写一下wang2.cpp文件（细心的大家已经发现了我看的教程是鱼香ROS的哈哈哈）但是我们不要以为这就完事了！然后我们的包就创建完毕了！]]></description><category></category></item><item><title><![CDATA[QT配置ROS一些小问题（1）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/139644619</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/139644619</guid><author>sufukang12</author><pubDate>Thu, 13 Jun 2024 14:53:32 +0800</pubDate><description><![CDATA[如果直接安装，不选择版本号，系统会默认安装第一个，经过几次测试，这一个版本会与当前版本不兼容，我这里第二个版本号是。再安装catkin_tools：sudo pip3 install -U catkin_tools。第一句命令是在更新你的软件列表，在每次执行 apt 命令前，最好都进行更新。先安装pip：sudo apt install python3-pip。第一种：需要安装：sudo apt install catkin。第二种需要安装：python3-catkin-tools。]]></description><category></category></item><item><title><![CDATA[onnxruntime部署大致流程（仅供自己理解学习，有些地方可能不对）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/139341533</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/139341533</guid><author>sufukang12</author><pubDate>Fri, 31 May 2024 22:11:48 +0800</pubDate><description><![CDATA[第六步：将处理后的输入张量在创建的session环境中运行（这里虽然用的是auto，其实就是Ort::Value类型的参数）第二种：直接利用手动进行转化（不太推荐，有现有的直接使用也可以，不如OpenCV集成好的）第八步：将输出的参数进行转化，然后对输出张量信息进行处理，以及定义输出图片的所需参数。第十一步：对生成后的一堆框进行非极大值抑制操作从而更准确的获得我们想要的结果。5.1创建一个输入的张量，此处的bolb就是前面由输入图片转成的bolb。第十步：对取得的结果进行边界框绘制。]]></description><category></category></item><item><title><![CDATA[QT配置opencv（release或者debug仅有一种方式可运行）（其他函数库lib同样也会出现的问题）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/139012100</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/139012100</guid><author>sufukang12</author><pubDate>Fri, 17 May 2024 20:07:08 +0800</pubDate><description><![CDATA[在OpenCV中，有两种.lib格式的OpenCV.lib文件，其中有末尾带d的有不带d的（分别代表release版本和debug版本）大部分教程我看的是，但是这种有个小问题，就是他可能只会调用，release版本的型号。有可能debug会出现问题。我们在编译的过程中如果想要release版本的我们可以仅使用。我们在编译的过程中如果想要debug版本的我们可以仅使用。切记两个版本同时使用，否则一般是谁在前面谁先生效。]]></description><category></category></item><item><title><![CDATA[QT学习经验（多线程处理，及出现的问题）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138728194</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138728194</guid><author>sufukang12</author><pubDate>Sat, 11 May 2024 20:09:37 +0800</pubDate><description><![CDATA[如果对象与GUI相关，并且需要在不同线程中使用，确保只在主线程（GUI 线程）中访问 GUI 元素。：确保对象的状态在迁移到新线程之前是合适的。例如，如果对象依赖于当前线程的事件循环或其他线程特定的资源，将其迁移到另一个线程可能会导致不一致的状态或行为。将实例化对象移到子线程之后，需要确保在启动子线程之前，对象的相关操作已经完成，否则可能会导致错误。：在不同线程中的对象之间进行通信时，确保使用线程安全的方式。这是因为我们虽然启动了子线程，但是在程序结束的时候我们并没有结束子线程。]]></description><category></category></item><item><title><![CDATA[QT学习经验（QT配置OpenCV及onnxruntime出现的问题，及不同编译器解决办法）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138679157</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138679157</guid><author>sufukang12</author><pubDate>Fri, 10 May 2024 20:12:32 +0800</pubDate><description><![CDATA[首先，选择配置项目的编译环境：这里我们选择的windows下面的编译环境（下载的时候OpenCV及onnxruntime要选择windows的release版本）注：这里只是windows编译环境下的配置！如果想要配置mingw格式，官网的release并不提供，大家需要自己下载源码自行编译。OpenCV源码编译:Qt配置OpenCV教程，亲测已试过（详细版）_qt opencv-优快云博客。onnxruntime，还没找到。解压下载后记得把这两个加入到环境变量。在main.cpp文件中包涵头文件。]]></description><category></category></item><item><title><![CDATA[ROS2学习经验6（参数设置及使用）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138338712</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138338712</guid><author>sufukang12</author><pubDate>Tue, 30 Apr 2024 11:02:58 +0800</pubDate><description><![CDATA[以上C++和python既代表了两种语言也代表了两种赋值方式。get表示接收的参数。我们可以在rqt工具中进行查看参数。]]></description><category></category></item><item><title><![CDATA[ROS2学习经验5（客户端和服务端关系）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138336870</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138336870</guid><author>sufukang12</author><pubDate>Tue, 30 Apr 2024 10:46:17 +0800</pubDate><description><![CDATA[3.并写出相应的回调函数（服务端需要写一个回调函数即可（request和response一般写在同一个处理回调函数中），客户端一般需要写两个函数，一个是用来发送request函数，一个是用来接受response回调函数）4.2服务端对收到的request进行处理，然后对response进行复制便可以进行传递内容（在python服务端中使用return response进行返回数值）4.1写出来的之后客户端在相应的函数中进行异步发送这样才可以进行信息的传递。通常，ROS 2 服务消息的名称是通过它们对应的。]]></description><category></category></item><item><title><![CDATA[ROS2中C++多线程表达学习经验4（服务端多线程回调函数，多线程节点）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138291498</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138291498</guid><author>sufukang12</author><pubDate>Sun, 28 Apr 2024 21:32:05 +0800</pubDate><description><![CDATA[这里再补充一下，在学习经验三中，介绍了python的服务sever回调函数，其中的两个参数request和response我们都没有定义但是python可以自动识别，但是在C++可不可以哦。这样将服务端启动之后，内部的&SingleDogNode::sell_novel_callback回调函数会被放在回调组内去进行执行，不会影响到其他回调函数。我们定义好了一个回调组我们需要对回调组进行定义，如果不定义为MutuallyExclusive类型，那还是会顺序执行，和单线程一样。然后去再进写回调函数。]]></description><category></category></item><item><title><![CDATA[ROS2学习经验3（疑问）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138255076</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138255076</guid><author>sufukang12</author><pubDate>Sat, 27 Apr 2024 18:36:43 +0800</pubDate><description><![CDATA[虽然你在客户端需要先定义请求对象，但是在服务端并不需要先定义响应对象。这是因为服务端的回调函数中会直接创建响应对象，并将其返回。ROS 2的服务端框架会自动处理响应对象的生命周期，你只需要在回调函数中构建响应对象并返回即可。当我学到客户端和服务端的时候发现，我使用我自己定义好的接口在写客户端时候发现，必须要先定义好了需要发送的请求内容的类，再进行发送。在ROS 2中，服务端在收到请求后，会调用回调函数来处理请求并生成响应。在回调函数中，你可以直接构建响应对象，并在函数末尾使用。他知道直接返回的类型。]]></description><category></category></item><item><title><![CDATA[ROS2学习到的经验2（文件的配置）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138232385</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138232385</guid><author>sufukang12</author><pubDate>Fri, 26 Apr 2024 22:42:13 +0800</pubDate><description><![CDATA[这里再教大家一下，一般ros2编译好的文件都会在install文件下面对应的lib里面，大家可以进去看看自己的节点是不是编译好了，可以找出问题。同理C++产生的节点也是在install中C++程序类下面的lib中去查看，记得先把cmake文件配置好。切记哦，每个node节点都需要定义好然后以逗号,进行隔开否则的话就会出现，下面这个神奇的node节点，导致我们后面找节点的时候可能给找不到。当我们在python中创建超过两个节点的时候，我们需要在setup.py中进行声明。]]></description><category></category></item><item><title><![CDATA[ROS2学习经验1（C++写节点编译出现的一些问题总结，及注意事项）]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/138193449</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/138193449</guid><author>sufukang12</author><pubDate>Thu, 25 Apr 2024 16:53:06 +0800</pubDate><description><![CDATA[时，在/dev_ws和/dev_ws/src目录下执行该命令，会往AMENT_PREFIX_PATH，CMAKE_PREFIX_PATH，COLCON_PREFIX_PATH三个地方添加环境变量。其次：我们要在CMakeLists.txt，文件中进行修改，因为C++在编译的过程中需要配置CMake文件，看看在最后是不是加上了这两句话。我们可以使用printenv AMENT_PREFIX_PATH指令去查看现在所存在的变量。首先我们先检查Vscode的配置文件，头文件是否包含进来了这里面包含了已有的文件。]]></description><category></category></item><item><title><![CDATA[QT如何将多个按钮集成起来，减少按钮槽函数的数量]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/137903507</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/137903507</guid><author>sufukang12</author><pubDate>Thu, 18 Apr 2024 09:23:26 +0800</pubDate><description><![CDATA[1.首先在UI界面已经定义好了多个button按键，但是如果每个按键单独做一个槽函数可能就比较麻烦，那有没有一种方法可以实现在一个函数内去定义多个按键的操作呢？首先这两个函数的传入变量设置为QPushButton类型，然后通过对按键的判断来实现不同按键实现的功能。通过信号槽将按钮的按下效果与触发功能函数连接起来这样就可以直观的控制多个按钮的操作了。利用信号槽的方法去解决这个问题。]]></description><category></category></item><item><title><![CDATA[发那科机器人KAREL程序调试过程，以及在程序运行过程中出现的变量未定义问题。]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/137887201</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/137887201</guid><author>sufukang12</author><pubDate>Wed, 17 Apr 2024 20:21:10 +0800</pubDate><description><![CDATA[当时我不知道为什么发生了这个问题，解决的办法还不知道但是因为这是一个keral程序那么我们可以去观察keral的变量，看看到底这个data8是怎么回事。突然意识到这种情况可能是因为，当时程序并没有对没有按照“，”分隔的地方进行打断，导致data8的值没有分离出来，从而使得参数没有传递成功。操作步骤：先打开data，然后F1，点击类型KAREL变量，便可以看到主要函数运行的变量，接着往下找可以看见data8值有些不正常。本图片记录了发那科机器人在运动过程中会出现参数未设定问题；]]></description><category></category></item><item><title><![CDATA[解决发那科机器人，无法读取具有工具的TCP当前位置]]></title><link>https://blog.youkuaiyun.com/sufukang12/article/details/137611380</link><guid>https://blog.youkuaiyun.com/sufukang12/article/details/137611380</guid><author>sufukang12</author><pubDate>Wed, 10 Apr 2024 21:25:35 +0800</pubDate><description><![CDATA[我打算用CURPOS和CURJPOS去读取发那科机器人的当前位置，但是发现，读出来的坐标只是默认未安装工具的值，并不是安装后的值。原来是组的坐标没有定义，因此为了保证该组的位置与工具坐标一致，所以需要在程序中进行定义。为了解决这个问题，我怀疑可能是CURPOS的问题，解决方法：现将一下变量设置为1及工具1。]]></description><category></category></item></channel></rss>