您现在的位置是:首页 >学无止境 >在VSCode下利用PlateFormIO开发Arduino的MicroROS遇到的一些问题网站首页学无止境
在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)]](https://img-blog.csdnimg.cn/6dd007b7ab744480a48e01e1c299cfca.png)
顺利的话,等编译完成后,你就可以看到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.这个参数是控制执行器允许处理的对象数量,可以自己看一下源码。这也是对寸土寸金的单片机的妥协,也没办法,要控制好每一份资源。
其他暂时没问题,遇到再补充。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结