您现在的位置是:首页 >学无止境 >在VSCode下利用PlateFormIO开发Arduino的MicroROS遇到的一些问题网站首页学无止境

在VSCode下利用PlateFormIO开发Arduino的MicroROS遇到的一些问题

韭菜钟 2024-10-10 12:01:05
简介在VSCode下利用PlateFormIO开发Arduino的MicroROS遇到的一些问题

简介

我是按照鱼香ROS的教程【3.搭建PlateFormIO开发环境】进行的,但是在进行的过程中,遇到了一些问题,这里记录下来,供有同样问题的同学进行参考。其实只要你使用的板子的MCU是ESP32,都可以按照他这个教程进行操作。

1.在第四节编译工程中,教程使用的vscode是有编译、上传的按钮的。但是我的没有。

教程的:
在这里插入图片描述我的:
在这里插入图片描述
不过没关系,点击那个小蚂蚁,执行RROJECT TASKS–》General下面的命令,具有同样的效果。
在这里插入图片描述
后来又发现在右上角:
在这里插入图片描述

2.在【6.串口通信-接收实验】中,没有串行监视器(Serial Monitor)。

教程中是有这个东西的,但是这边没有。
在这里插入图片描述
其实这个需要是个独立的拓展,需要自己独立安装。
在这里插入图片描述

3.关于trajectory_msgs/msg/joint_trajectory.hpp的相关问题

首先我们要明确,microros这个环境基本是基于c开发的,而不是cpp。所以,trajectory_msgs/msg/joint_trajectory.hpp这个cpp下的目录是没有的,取而代之的是trajectory_msgs/msg/joint_trajectory.h
在这里插入图片描述

4.关于control_msgs::action::FollowJointTrajectory的相关问题

假如我们想让我们的microros节点直接接入到moveit中,一种比较好的办法是直接在此节点上实现一个action_server,类型为control_msgs::action::FollowJointTrajectory。
但是目前鱼香ros的microros不支持该类型,而官方的也是不支持的(当使用官方的microros时,需要梯子或者fastgithub)。
不知道怎么回事,我看官方的【micro_ros_arduino】是有这个模块的。
在这里插入图片描述
我在上面发起了个提问,到时候再看看。【I couldn’t find the control_msg module in the compiled include folder】
实在没办法的话,可以暂时在电脑端创建个action_server,然后通过用service传给下位机吧。
20230612:他们今天回答了。
在这里插入图片描述
意思大概是假如这个库没有control_msgs这个模块,需要自己按照 https://github.com/micro-ROS/micro_ros_platformio#extra-packages 这里的说明来进行添加到编译步骤中。
在这里插入图片描述
ok,那我们自己操作一下。
呃,但是,在哪个路径下搞这个extra_packages.repos呢??
虽然在 /home/yong/Desktop/arduino/hello_microros/.pio/libdeps/featheresp32/micro_ros_platformio/ci/extra_packages(你需要根据你自己的项目名字来决定这个路径,其实也就是你当前项目下的) 这个目录下是有一个extra_packages.repos。
在这里插入图片描述
我们用的是humble,他这个是galactic-devl与humble可能不匹配。我们去 https://github.com/ros-controls/control_msgs 看看
在这里插入图片描述有humble的,那我们手动改一下:
在这里插入图片描述
改完,重新编译,貌似没什么不一样。可能我理解错了。
我还是直接用我发现的一个办法吧:
直接修改 repositories.py
在这里插入图片描述

  +          Repository("control_msgs", "https://ghproxy.com/https://github.com/ros-controls/control_msgs", "humble"),

修改之后,手动将libmicroros文件夹删除,
在这里插入图片描述
然后重新编译
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qa6iQrQs-1686555231137)(null)]
顺利的话,等编译完成后,你就可以看到control_msgs了。
在这里插入图片描述

不是很懂为什么官方不直接加进去,难道是出于单片机资源紧张的考虑?

5.publisher以及service不能同时实现的问题

按照教程,假如你想把发布话题实现服务这两个功能一起放到同一个工程中:

...
  // 执行器添加服务
  rclc_executor_add_service(&executor, &service, &req, &res, service_callback);
...
  // 给执行器添加定时器
  rclc_executor_add_timer(&executor, &timer);
...

会发现只能实现其中一个功能,另外一个会被忽略。
这个其实只要改一下执行器的初始化语句就行:

  // 创建执行器
-  rclc_executor_init(&executor, &support.context, 1, &allocator);
+  rclc_executor_init(&executor, &support.context, 2, &allocator);

也就是把number_of_handles从1改成2.这个参数是控制执行器允许处理的对象数量,可以自己看一下源码。这也是对寸土寸金的单片机的妥协,也没办法,要控制好每一份资源。

其他暂时没问题,遇到再补充。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。