欧拉派Ubuntu/openEuler安装ROS2 foxy

欧拉派Ubuntu/openEuler安装ROS2 foxy hellokun 2024-11-26 09:47:53 409

一、系统准备

1、获取镜像(ubuntu、openEuler)

开发前准备,开发板(购买链接:https://www.ebaina.com/ai/58 ) 及其连接如图所示:

1)方式一:从SDK中拿到ubuntu、openEuler和系统镜像,下载镜像后可以解压得到如下文件:

2)方式二:直接使用openEuler-ROS镜像

该方法可以直接下载带ROS的openEuler镜像,具体参考:海鸥派镜像获取 — openEuler Embedded在线文档 24.03 documentation

需要下载的镜像内容包括以下四个文件:

  1. boot_image_[MEM_SIZE].bin u-boot镜像,其中MEM_SIZE是开发板的内存大小
  2. boot_env_[MEM_SIZE].bin u-boot环境变量分区
  3. kernel-pi Linux内核
  4. openeuler-image-hieulerpi1-[时间戳].rootfs.ext4 根文件系统

注:(openEuler ros系统烧录到手里的海鸥派开发板后,会在系统启动过程中国一直报USB打开错误的error,不能正常使用。初步判断是手里的欧拉派和镜像不匹配。最终没有使用该方式安装ROS)。

3)方式二:自行编译镜像(没有需要修改的内容不推荐该方式,比较费时间)

Ubuntu、Linux和openEuler参考:海鸥派 Euler Pi SDK编译开发指南.pdf

openEuler在线文档可参考:海鸥派镜像构建与使用 — openEuler Embedded在线文档 24.03 documentation

2、烧录镜像

SD卡烧录参考:海鸥派 Euler Pi 固件烧写及升级.pdf

没有SD卡推荐使用Platform Tool工具。目前Platform Tool烧录有个机制导致烧录镜像时很慢,会把文件系统拆开为每32Mb一份固件烧录。烧录时的分区表如下:

二、网络配置

除了openEuler支持wifi,其他系统都不支持WIIF,所以这里讲解如何配置开发板以太网,让开发板可以正常访问公网。本节开始前需要做如下准备:

  • 欧拉派已烧录ubuntu/openEuler无ros的系统

  • 准备一根网线,由开发板eth0接入电脑以太网口

  • 准备一根USB-Type数据线,由欧拉派Debug口接到电脑
  • 准备DP电源/12V外接电源给开发板供电
1、PC共享网络
1)设置电脑wifi网卡共享到开发板以太网口

2)设置开发板以太网口的IP为【使用以下配置】

3)开发板配置eth0的IP、网关地址、DNS服务地址
# 开发板IP,与wifi在同一局域网段即可,不能重复
ifconfig eth0 192.168.137.2 
# 网关地址
route add default gw 192.168.137.1
# 添加DNS服务地址
vi /etc/resolv.conf
nameserver 192.168.10.1 #需要与PC端wifi属性中的DNS服务器一致

查看wifi网卡的DNS:

2、连接路由器

开发板网口连接到路由器时,只需要配置开发板eth0的IP、网关地址、DNS服务地址即可。

3、使用ssh登录

网络配置完成后,可以使用ssh访问开发板,以PuTTY为例,登录配置如下:

三、安装ROS2

下面以ubuntu为例介绍ROS2安装过程,openEuler可参考安装指令(bash指令不是apt是yum)。目前ubuntu是20.04,对应ROS foxy版本,安装步骤如下:

0.安装python3.8.10和curl

#进入系统后默认登陆信息user_name:root  pwd: ebaina
apt install python3.9
apt install curl

1.设置源:

 apt update &&  apt install curl gnupg2 lsb-release
 curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc |  apt-key add -

2.添加ROS2的源并更新:

sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

更新ROS2包:

 apt update

3.安装ROS2

可以选择基础包,(因为没有桌面系统,不包括ROS2 Dashing Diademata包):

apt install ros-foxy-ros-base python3-argcomplete

桌面全量版本,包含ROS2 Dashing Diademata包

sudo apt install ros-foxy-desktop python3-argcomplete

4.环境设置:

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc

5.安装arg完全工具和其他依赖项:

apt install -y python3-argcomplete python3-colcon-common-extensions python3-rosdep python3-vcstool

apt install ros-dev-tools

6.初始化rosdep:

 rosdep init
 rosdep update

以上步骤将安装ROS2 版本。如果需要安装其他版本的ROS,请替换步骤4中的包名称为对应的版本,例如ros-foxy-desktop安装Foxy Fitzroy的桌面版。

四、运行foxy ROS2

1、基础版本验证
#在终端输入如下指令即可
ros2 launch --hlep
#输出如下:

2、桌面版本案例验证

桌面版本有默认案例可以验证,一个发布者taker向一个监听者listener发布“hello World!”的消息,终端执行

#一个终端执行
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_cpp talker

#另一个终端执行
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_py listener

效果如下图:

也可以使用python自己实现一个案例,在两个不同的终端中运行这两个脚本,首先是talker.py,然后是listener.py。你会看到listener.py终端打印出talker发送的消息。参考如下

''' talker.py '''
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class Talker(Node):
    def __init__(self):
        super().__init__('talker')
        self.publisher_ = self.create_publisher(String, 'topic', 10)
        self.timer = self.create_timer(0.5, self.timer_callback)
        self.i = 0

    def timer_callback(self):
        msg = String()
        msg.data = 'Hello World! %d' % self.i
        self.publisher_.publish(msg)
        self.get_logger().info('Published: "%s"' % msg.data)
        self.i += 1

def main(args=None):
    rclpy.init(args=args)
    talker = Talker()
    rclpy.spin(talker)
    talker.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()
'''listener.py'''
import rclpy
from rclpy.node import Node
from std_msgs.msg import String

class Listener(Node):
    def __init__(self):
        super().__init__('listener')
        self.subscription = self.create_subscription(
            String,
            'topic',
            self.callback,
            10)

    def callback(self, msg):
        self.get_logger().info('I heard: "%s"' % msg.data)

def main(args=None):
    rclpy.init(args=args)
    listener = Listener()
    rclpy.spin(listener)
    listener.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
hellokun
红包 1 收藏 评论 打赏
评论
1个
内容存在敏感词
手气红包
  • DarrenPig 2025-01-16 15:27:40
    回复
    牛🐂
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
hellokun
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区