【笔记】macOs arm架构安装虚拟机Ubuntu环境:ROS2 + Python开发

macOs arm架构安装虚拟机Ubuntu环境:ROS2 + Python开发

Ubuntu、ROS2、Python版本关系

ROS2版本 发布年份 支持状态 Python版本 Ubuntu版本
Jazzy 2024 最新 Python3.12 Ubuntu 24.04
Iron 2023 LTS到2027 Python 3.10 Ubuntu 22.04
Humble 2022 LTS到2027 Python 3.10 Ubuntu 22.04
Rolling 持续更新 开发版 Python 3.10-3.12 多种

一、Ubuntu基础系统安装搭建

1、下载VMware Fusion

(1)下载VMware-Fusion-13.6.2-24409261_universal.dmg

我用夸克网盘给你分享了「VMware-Fusion-13.6.2-24409261_universal.dmg」,点击链接或复制整段内容,打开「夸克APP」即可获取。

/094838Nq2k😕

链接:https://pan.quark.cn/s/cd6bf0b1b0ee

提取码:5cAy

(2)下载完成双击安装即可

2、下载Ubuntu镜像文件(推荐Ubuntu 22.04 LTS)

下载Ubuntu 24.04(Noble) LTS镜像文件

ubuntu-24.04-desktop-arm64.iso

https://mirrors.huaweicloud.com/ubuntu-cdimage/ubuntu/releases/24.04/release/

3、创建虚拟机

创建自定虚拟机------》继续

选择Linux------> Ubuntu 64位arm

之后一直默认点到完成。

(1)重要!!调整硬盘大小 (在没有把操作系统安装完成之前,之后扩容有些许麻烦)

在虚拟机------>硬盘 里面调整硬盘大小

(2)调整完硬盘大小之后CD/DVD里面把下载的镜像选择上,在启动磁盘里面选择CD/DVD,重新启动就可以进行下一步配置了

(3)查看Ubuntu版本:cat /proc/version

二、系统级安装ROS2

1、安装ROS2(推荐安装Humble 更稳定)

方式一:官方文档:https://docs.ros.org/en/rolling/Installation/Ubuntu-Install-Debs.html

方式二:鱼香ROS:

复制代码
sudo apt update #该命令会从默认的软件服务器拉取所有的软件列表

#运行安装工具。根据指示一步步安装
wget http://fishros.com/install -O fishros && bash fishros 

2、ROS2安装成功后查看ROS2环境变量参数

打印参数:printenv | grep -i ROS

不需要在Pycharm的环境变量里面增加打印的参数,这个属于系统环境变量,会自动去读取。

3、卸载ROS2 rolling

bash 复制代码
sudo apt remove ~nros-rolling-* && sudo apt autoremove

4、ROS2开发入门:鱼香ROS

https://fishros.com/d2lros2/#/humble/chapt2/get_started/5.使用RCLPY编写节点

4.1 Linux下的.a文件和.so文件

在widows平台下,静态链接库是.lib文件,动态库文件是.dll文件。在linux平台下,静态链接库是.a文件,动态链接库是.so文件。

4.2 简单ros2开发常用步骤

4.2.1 创建功能包
bash 复制代码
cd chapt2/chapt2_ws/src/
ros2 pkg create example_py  --build-type ament_python --dependencies rclpy
4.2 编写程序

编写ROS2节点的一般步骤

bash 复制代码
1. 导入库文件
2. 初始化客户端库
3. 新建节点
4. spin循环节点
5. 关闭客户端库

在example_py/example_py下创建node_02.py:

python 复制代码
import rclpy
from rclpy.node import Node

def main(args=None):
    """
    ros2运行该节点的入口函数
    编写ROS2节点的一般步骤
    1. 导入库文件
    2. 初始化客户端库
    3. 新建节点对象
    4. spin循环节点
    5. 关闭客户端库
    """
    rclpy.init(args=args) # 初始化rclpy
    node = Node("node_02")  # 新建一个节点
    node.get_logger().info("大家好,我是node_02.")
    rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)
    rclpy.shutdown() # 关闭rclpy

修改setup.py

python 复制代码
    entry_points={
        'console_scripts': [
            "node_02 = example_py.node_02:main"
        ],
    },
)
4.3 编译运行节点
bash 复制代码
# 编译节点
cd chapt2/chapt2_ws/
colcon build
# source环境
source install/setup.bash
#运行节点
ros2 run example_py node_02

节点运行起来之后,可以使用ros2 node list查看现有节点

三、 安装Anaconda和PyCharm创建conda环境

1、下载anaconda 的sh文件安装------>安装anaconda,运行sh文件:

bash 复制代码
bash anacondaxx.sh

2、conda环境创建原理

conda是一个开源的包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。

2.1 环境的概念

conda环境是一个独立的目录,其中包含特定版本的软件包和它们的依赖。每个环境都是相互隔离的,这意味着在一个环境中安装的软件包不会影响其他环境。

2.2 创建环境的步骤

bash 复制代码
# 创建新环境
conda create -n myenv python=3.8

# 激活环境
conda activate myenv

# 停用当前环境 如果当前激活了目标环境,需先停用:
conda deactivate

# 删除指定环境 使用以下命令删除虚拟环境: 
conda remove -n 环境名称 --all 
#示例:删除名为 myenv 的环境: conda remove -n myenv --all

2.3 环境隔离原理

  • 目录隔离:每个环境在envs/目录下有独立文件夹
  • PATH修改:激活时将该环境的bin/目录添加到PATH最前面
  • 环境变量:设置COND_DEFAULT_ENV和CONDA_PREFIX环境变量

2.4 包管理和依赖解析

bash 复制代码
# 安装包时的依赖解析过程
conda install numpy pandas

# Conda会:
# 1. 解析包依赖关系
# 2. 检查冲突
# 3. 下载兼容的包版本

2.5 conda使用的Python解释器

conda不使用系统自带的python,而是自己管理独立的Python解释器。当你创建一个新的conda环境时,conda会在这个环境的目录中安装一个独立的Python解释器(如果你在创建时指定了python版本)。这样,每个环境都可以有自己特定版本的python和包,互不干扰。python解释器位于环境目录下的python可执行文件。

3、Pycharm创建conda的原理

PyCharm是一个集成开发环境(IDE),它支持使用conda来管理项目环境。当在PyCharm中创建一个新的conda环境时,PyCharm实际上是在后台调用conda命令来创建环境。

问题1:安装conda环境显示SSL证书验证失败

解决:看下系统时间是否正确(使用虚拟机快照打开系统时间可能不对),重启看看

问题2:ModuleNotFoundError:no module named rclpy

解决方式:添加ros2相关包rclpy路径到Interpreter Paths下

bash 复制代码
# 配置步骤:
1. PyCharm → Preferences/Settings
2. Project → Python Interpreter
3. 点击齿轮图标 → Show All
4. 选择你的解释器 → 点击文件夹图标(Show paths for the selected interpreter)
5. 点击 "+" 添加自定义路径
添加ros2相关路径:`/opt/ros2/rolling/lib/python3.12/site-packages`

# 典型需要添加的路径:
- 项目源码根目录
- 包含自定义库的目录
- 第三方库的非标准安装路径
- 共享模块目录

问题3:ImportError: librcl_action.so: cannot open shared object file: No such file or directory

问题分析:librcl_action.so文件是动态库

解决:我错误地直接运行py文件了,没有使用ros2

的构建编译,ros2开发要使用ros2的构建编译运行规则

bash 复制代码
colcon build
source install/setup.bash
ros2 run example_py node_02

问题4:ubuntu24.04 ros2(jazzy)ros2 launch的时候 报错 packge "usb_cam " not found

注意ROS2版本,使用Jazzy,不要使用Rolling开发版

bash 复制代码
# 更新软件包列表
sudo apt update

# 搜索可用的 usb_cam 包
apt search ros-jazzy-usb-cam

# 安装 usb_cam 包
sudo apt install ros-jazzy-usb-cam

# 重新加载环境
source /opt/ros/jazzy/setup.bash
bash 复制代码
1、package "usb_cam" not found 下载包sudo apt install ros-jazzy-usb-cam
2、/home/lc/ 需要改成自己的路径/home/xxx/Documents/项目名
3、no moudle not found:pip install 下载
4\Error in cpuinfo: prctl(PR_SVE_GET_VL) failed

5\Unable to open camera calibration file [/home/hri/.ros/camera_info/head_camera.yaml]
解决办法:

sudo apt-get install ros-indigo-image-view
bash 复制代码
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令

4、python包下载镜像设置

4.1 terminal中设置永久镜像:

bash 复制代码
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

4.2 验证配置是否生效:

bash 复制代码
pip config list

4.3 附:常用国内镜像

bash 复制代码
# 清华大学
https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里云
https://mirrors.aliyun.com/pypi/simple
# 豆瓣
https://pypi.douban.com/simple
# 中国科学技术大学
https://pypi.mirrors.ustc.edu.cn/simple
# 华为云
https://repo.huaweicloud.com/repository/pypi/simple

https://www.qishuxia.com/modules/article/txtarticle.php?id=289661

相关推荐
在坚持一下我可没意见7 小时前
Java 网络编程:TCP 与 UDP 的「通信江湖」(基于TCP回显服务器)
java·服务器·开发语言·笔记·tcp/ip·udp·java-ee
心灵宝贝7 小时前
Mac版Color Folder v3.8安装教程(附dmg文件安装步骤和搜索关键词)
macos
北冥有鱼被烹7 小时前
【微知】MAC笔记本如何重启tourchbar?(sudo pkill TouchBarServer)
macos
云和数据.ChenGuang7 小时前
tensorflow的广播机制
人工智能·python·tensorflow
咕白m6257 小时前
使用 Python 轻松实现 Excel 转 PDF 全指南
python
弈风千秋万古愁7 小时前
【PID】连续PID和数字PID chapter1(补充) 学习笔记
笔记·学习·算法·matlab
CodeCraft Studio7 小时前
MPP文件处理组件Aspose.Tasks教程:使用Python在Excel中打开MPP文件
python·ui·excel·csv·mpp·aspose·ms project
王六岁7 小时前
🐍 前端开发 0 基础学 Python 入门指南:f-strings 篇
前端·javascript·python