
ROS2
文章平均质量分 52
叫我小苏吧·
这个作者很懒,什么都没留下…
展开
-
关于QT多线程与ROS2通讯并在ui显示与节点的继承(3.2)
1.为了保证node节点具有connect功能,我们这边传的参数必须是已经继承好Qobject的类的共享指针,同时将node_(node)实例化,方便后续的处理。在这个例子中我实现了,一个通讯节点的类,同时我在另外一个类中实现了子线程的使用,并且在主窗口进行了实现。首先先写.h文件,一定要记住该类一定要既要继承node而且也要继承QObject!这个写到按键的connect里面,否则是没有办法找到rosworker这个对象的。同时也是支持关闭的:并不会影响主线程的运行。原创 2024-07-02 21:41:42 · 920 阅读 · 0 评论 -
关于QT多线程应用与ROS2的topic通讯(3.1)
在mainwindow的使用 :(这里一定要注意!rclcpp::init()与rclcpp::shutdown()成对出现!因此为了避免重复初始化以及重复关闭情况所以需要用if进行判断,从而方式程序崩溃)因为,在主线程执行spin的时候会阻塞,所以我们想要通过多线程解决这个问题,同时可以通过主线程按键信号去控制话题的同断。然后点击关闭节点(疯狂点击也不会崩溃!随后为了使得这个节点可可以在子线程中运行,因此我们创立一个子线程的运行空间。可以正常通讯(这时候疯狂点击也不会出现崩溃现象!原创 2024-07-01 19:23:29 · 777 阅读 · 0 评论 -
QT配置ROS一些小问题(2)
我不使用QT自带的包创建工具去创建,还是使用原本的ROS2的创建包工具在该工作空间的src目录下自己创建。(QT只不过是个载体,无所谓用什么方法去创建包,大家不要纠结用什么办法去创建包)(为了演示我只写了cpp文件,如果是自己项目的话,建议大家还是吧.h和.cpp分开写)但是我会有个问题:一旦使用QT自己的package去创建包的话大概率会创建失败(我没找到解决办法)写一下wang2.cpp文件(细心的大家已经发现了我看的教程是鱼香ROS的哈哈哈)但是我们不要以为这就完事了!然后我们的包就创建完毕了!原创 2024-06-15 11:48:11 · 846 阅读 · 0 评论 -
QT配置ROS一些小问题(1)
如果直接安装,不选择版本号,系统会默认安装第一个,经过几次测试,这一个版本会与当前版本不兼容,我这里第二个版本号是。再安装catkin_tools:sudo pip3 install -U catkin_tools。第一句命令是在更新你的软件列表,在每次执行 apt 命令前,最好都进行更新。先安装pip:sudo apt install python3-pip。第一种:需要安装:sudo apt install catkin。第二种需要安装:python3-catkin-tools。原创 2024-06-13 14:53:32 · 972 阅读 · 0 评论 -
ROS2学习经验6(参数设置及使用)
以上C++和python既代表了两种语言也代表了两种赋值方式。get表示接收的参数。我们可以在rqt工具中进行查看参数。原创 2024-04-30 11:02:58 · 401 阅读 · 1 评论 -
ROS2学习经验5(客户端和服务端关系)
3.并写出相应的回调函数(服务端需要写一个回调函数即可(request和response一般写在同一个处理回调函数中),客户端一般需要写两个函数,一个是用来发送request函数,一个是用来接受response回调函数)4.2服务端对收到的request进行处理,然后对response进行复制便可以进行传递内容(在python服务端中使用return response进行返回数值)4.1写出来的之后客户端在相应的函数中进行异步发送这样才可以进行信息的传递。通常,ROS 2 服务消息的名称是通过它们对应的。原创 2024-04-30 10:46:17 · 339 阅读 · 1 评论 -
ROS2中C++多线程表达学习经验4(服务端多线程回调函数,多线程节点)
这里再补充一下,在学习经验三中,介绍了python的服务sever回调函数,其中的两个参数request和response我们都没有定义但是python可以自动识别,但是在C++可不可以哦。这样将服务端启动之后,内部的&SingleDogNode::sell_novel_callback回调函数会被放在回调组内去进行执行,不会影响到其他回调函数。我们定义好了一个回调组我们需要对回调组进行定义,如果不定义为MutuallyExclusive类型,那还是会顺序执行,和单线程一样。然后去再进写回调函数。原创 2024-04-28 21:32:05 · 597 阅读 · 2 评论 -
ROS2学习经验3(疑问)
虽然你在客户端需要先定义请求对象,但是在服务端并不需要先定义响应对象。这是因为服务端的回调函数中会直接创建响应对象,并将其返回。ROS 2的服务端框架会自动处理响应对象的生命周期,你只需要在回调函数中构建响应对象并返回即可。当我学到客户端和服务端的时候发现,我使用我自己定义好的接口在写客户端时候发现,必须要先定义好了需要发送的请求内容的类,再进行发送。在ROS 2中,服务端在收到请求后,会调用回调函数来处理请求并生成响应。在回调函数中,你可以直接构建响应对象,并在函数末尾使用。他知道直接返回的类型。原创 2024-04-27 18:36:43 · 209 阅读 · 0 评论 -
ROS2学习到的经验2(文件的配置)
这里再教大家一下,一般ros2编译好的文件都会在install文件下面对应的lib里面,大家可以进去看看自己的节点是不是编译好了,可以找出问题。同理C++产生的节点也是在install中C++程序类下面的lib中去查看,记得先把cmake文件配置好。切记哦,每个node节点都需要定义好然后以逗号,进行隔开否则的话就会出现,下面这个神奇的node节点,导致我们后面找节点的时候可能给找不到。当我们在python中创建超过两个节点的时候,我们需要在setup.py中进行声明。原创 2024-04-26 22:42:13 · 279 阅读 · 1 评论 -
ROS2学习经验1(C++写节点编译出现的一些问题总结,及注意事项)
时,在/dev_ws和/dev_ws/src目录下执行该命令,会往AMENT_PREFIX_PATH,CMAKE_PREFIX_PATH,COLCON_PREFIX_PATH三个地方添加环境变量。其次:我们要在CMakeLists.txt,文件中进行修改,因为C++在编译的过程中需要配置CMake文件,看看在最后是不是加上了这两句话。我们可以使用printenv AMENT_PREFIX_PATH指令去查看现在所存在的变量。首先我们先检查Vscode的配置文件,头文件是否包含进来了这里面包含了已有的文件。原创 2024-04-25 16:53:06 · 681 阅读 · 1 评论