我正在使用的教程:
1.3.3 HelloWorld实现B(Python) · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
同时还有b站的配套视频:
020HelloWorld实现(python)_Chapter1-ROS概述与环境搭建_哔哩哔哩_bilibili
视频中的教程用的是Noetic搭配的是Ubuntu20.04,我的系统是ubuntu18.04,记录一些有出入的地方以及debug记录,本篇博客需要配合教程使用哦,我涵盖了所有用18.04会出现的问题,如果对你有帮助的话可以点赞留言,我也更有动力更新文章了:)
目录
Q2: 1.3.3-melodic版本差异以及 Invoking "cmake" failed
Q5:ModuleNotFoundError: No module named 'rospkg'
Q1: 1.2.6-安装版本问题
如果是ubuntu18.04版本, 那么要使用melodic,直接看教程的1.2.6, 注意在下载ROS的时候要用这个:
sudo apt install ros-melodic-desktop-full
cn/ROS/Installation - ROS Wiki
Q2: 1.3.3-melodic版本差异以及 Invoking "cmake" failed
注意这里不需要像教程里面一样去掉注释,再更改名字,只需要保持原样就可以了,不然就会报错
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# catkin_install_python(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
Q3: 1.4.2-在虚拟环境中调用ide
先启动虚拟环境,再启动vscode
conda env -n ros
conda activate ros
mkdir demo01_ws/src
cd demo01_ws
code .
Q4:1.4.2-写代码的补全提示
// "cppStandard": "c++14"
"cppStandard": "c++17"
Q5:ModuleNotFoundError: No module named 'rospkg'
Traceback (most recent call last):
File "/home/pcia1/atest/src/test-pkg/scripts/helloworld_p.py", line 4, in <module>
import rospy
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 49, in <module>
from .client import spin, myargv, init_node, \
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/client.py", line 52, in <module>
import roslib
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/__init__.py", line 50, in <module>
from roslib.launcher import load_manifest # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/ros/melodic/lib/python2.7/dist-packages/roslib/launcher.py", line 42, in <module>
import rospkg
ModuleNotFoundError: No module named 'rospkg'
There is a confusion of version of python in interpretor and ROS package:
Try to change the shebang (line 1) according to the python version your ROS distro works with.
For melodic or earlier: #!/usr/bin/env python2
For noetic or later: #!/usr/bin/env python3
所以我改成了这样:
#! /usr/bin/env python2
(ros) pcia1@pcia1-P330:~/demo01_ws$ /usr/bin/env python2
Python 2.7.17 (default, Mar 8 2023, 18:40:28)
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
(ros) pcia1@pcia1-P330:~/demo01_ws$ /usr/bin/env python3
Python 3.12.2 | packaged by Anaconda, Inc. | (main, Feb 27 2024, 17:35:02) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
(ros) pcia1@pcia1-P330:~/demo01_ws$ /usr/bin/env python
Python 3.12.2 | packaged by Anaconda, Inc. | (main, Feb 27 2024, 17:35:02) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
在环境中其实存在python,python2, python3, 我们要创建一个链接符号, 每次在这个虚拟环境中调用python的时候,都是在调用python2(for melodic case)
sudo ln -s /usr/bin/python2 /usr/bin/python
我们在python文件最上面写的是:
#! /usr/bin/env python
(ros) pcia1@pcia1-P330:~/demo01_ws$ rosrun demo01_pkg helloVScode_p.py
[INFO] [1713278303.985389]: this is hello from python
但是我在转天调用的时候又不能用了, 我建议melodic用户直接写python2就好了,就多一个2,少很多烦恼,而且要注意每次有修改的时候要先保存,然后再进行后面的一系列操作:)
总结:
python运行不成功真的卡好久,希望大家看到我这篇可以少走点弯路。大致了解了ROS架构以及在C++和python编写的应用。教程真的很适合初学者,一边理论一边应用,很容易上手。