起因
最近在做人体姿态估计的项目,需要用到ROS2,但是ROS2的消息类型不够用,所以需要自定义消息类型,这里记录一下自定义消息类型的过程.
使用的工具如下
- ROS2 Humble
- VSCode
- Alphapose
之前跟着官方文档做过一次,但是学会了,但又没学会.这次是真的要用,反而出问题了.
自定义消息类型
之前以为每个包里面都可以自定义消息,但是想多了,需要独立的包来存放自定义消息.
创建包
1 | ros2 pkg create --build-type ament_python --node-name people_msgs people_msgs |
创建消息
1 | # Point.msg |
1 | # People.msg 以为人体关键点是26个,所以这里就写26个,但是后面发现出了问题 |
记住这个26,问题就出在这里.
1 | # PeopleArray.msg |
编译
1 | colcon build --packages-select people_msgs |
使用
1 | source install/setup.bash |
使用自定义消息
创建包
1 | ros2 pkg create --build-type ament_python --node-name people_sub people_sub |
编写代码
1 | # people_sub.py |
编译
1 | colcon build --packages-select people_sub |
使用
1 | source install/setup.bash |
问题
我使用自定义消息进行接收,发现接收到的消息是空的,后来发现是因为我在创建消息的时候,它会默认创建一个空的消息(26个数据都是0),所以我在创建消息的时候,需要先清空消息,然后再添加数据.
感悟
果然实践是检验真理的唯一标准
这次的问题是单步调试出来的,调试之前处理了python路径的问题,不然无法使用VSCode调试.
python扩展路径问题
1 | # 1.通过脚本查看python路径 |
设置环境vscode路径
Python扩展 设置 -> Pythoninterpreter Path -> (/usr/bin/python3)换成上一步的路径即可解决
还有个问题我问了下GPT
ROS2使用自定义Python解释器
要指定ROS 2使用的Python解释器,您可以设置环境变量PYTHON_EXECUTABLE,将其设置为要使用的Python解释器的路径。例如,假设您的自定义Python解释器位于/path/to/my/python,则可以使用以下命令在终端中设置环境变量:
export PYTHON_EXECUTABLE=/path/to/my/python
设置环境变量后,ROS 2将使用指定的Python解释器。您可以在启动ROS 2节点时验证Python解释器是否正确设置,例如:
ros2 run my_package my_node --ros-args --log-level debug
这将在终端输出ROS 2节点的日志信息,其中包括使用的Python解释器。如果您看到的输出中包含您自定义的Python解释器路径,则表示ROS 2正在使用指定的Python解释器。
注意,设置自定义Python解释器可能会导致ROS 2某些功能无法正常工作,因为ROS 2可能依赖于特定版本的Python和Python库。如果您遇到问题,请尝试使用ROS 2默认的Python解释器,或者确保您的自定义Python解释器与ROS 2所需的Python版本和库兼容。
本文作者:wxy
本文链接: https://c.undf.top/posts/2llqu4i/
文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。
本站不设评论,网站底部邮件图标可以联系博主
评论
如评论失效,请点击最下方的邮件图标联系作者。