ros2入门--古月居

实用网站

answers.ros.org

wiki.ros.org(教程和各种功能包使用方法)

ros1和ros2对比

小海龟实验

显示小海龟

ros2 run turtlesim turtlesim_node

让小海龟动起来

使用上下左右键运动,上-前,下-后,左右-向左向右转圈

小海龟即机器人的雏形。

ros2 run turtlesim turtle_teleop_key

命令行操作

使用终端terminal进行命令输入,打开快捷键ctrl+alt+t

工作空间与功能包

工作空间(workspace)存放项目开发相关文件的文件夹

创建编译工作空间

1.创建工作空间

方法一:创建文件夹“dev_workspace”-子文件夹“src”

方法二:代码

#创建工作空间
mkdir -p ~/dev_ws/src #作用与方法一相同(注意空格)
cd dev_ws/src     #cd到工作空间的代码空间
git clone https://gitee.com/guyuehome/ros2_21_tutorials.git 
#下载课程源码



(ps:终端中复制粘贴为ctrl+shift+c/v,但文件夹中不用包含shift)

2.自动安装依赖方法

#自动安装依赖
#sudo apt install -y python3-pip

sudo pip3 install rosdepc #解决网络问题
sudo rosdepc init & rosdepc update
cd .. #返回根目录
rosdepc install -i --from-path src --rosdistro humble -y

此代码中执行注释行时一直报错,问ds说是“这个错误表明您的系统在尝试从 cn.archive.ubuntu.com 下载软件包时遇到了 403 禁止访问错误。”

解决方案-手动下载

cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/universe/w/wheel/python3-wheel_0.37.1-2ubuntu0.22.04.1_all.deb
wget http://archive.ubuntu.com/ubuntu/pool/universe/p/python-pip/python3-pip_22.0.2+dfsg-1ubuntu0.7_all.deb
sudo dpkg -i python3-wheel_0.37.1-2ubuntu0.22.04.1_all.deb
sudo dpkg -i python3-pip_22.0.2+dfsg-1ubuntu0.7_all.deb
sudo apt install -f
# 删除下载的 deb 文件
rm /tmp/python3-wheel_0.37.1-2ubuntu0.22.04.1_all.deb
rm /tmp/python3-pip_22.0.2+dfsg-1ubuntu0.7_all.deb
# 创建 pip 配置目录
mkdir -p ~/.pip

# 配置清华镜像
cat > ~/.pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 120
EOF

3.编译工作空间

#编译工作空间
sudo apt install python3-colcon-ros
#cd ~/dev_ws/#确保在根目录即可
colcon build

4.配置环境变量

#设置环境变量
source install/local_setup.sh
Secho"source ~/dev_ws/install/local setup.sh">>~/.bashrc

创建功能包

格式

ros2 pkg create --build-type<build-type><package-name>

c++功能包中包含图片内容,其中package.xml介绍功能包的基本信息,由开发者命名,CMakeLists.txt介绍了功能包依赖。

python功能包xml文件与c功能包类似

其中setup.py是值得关注的,包含功能包基本信息和入口程序点,python不像C++需要对代码进行编译,但需要将可执行文件拷贝给workspace的install,后续继续学习如何配置。

节点:机器人的工作细胞

节点是执行具体任务的进程,每个节点都是一个可以独立运行的可执行文件,因此每个节点的编程语言可以是不同的,节点可以分布式运行在不同的硬件载体(主机),但每个节点都需要一个唯一的命名

示例1:循环打印helloworld

面向过程版

1.编程接口初始化

2.创建节点并初始化

3.实现节点功能

4.销毁节点并关闭接口

#!/usr/bin/env python3 
# -*- coding: utf-8 -*-

"""
@作者: 古月居(www.guyuehome.com)
@说明: ROS2节点示例-发布“Hello World”日志信息, 使用面向过程的实现方式
"""

import rclpy                                     # ROS2 Python接口库
from rclpy.node import Node                      # ROS2 节点类
import time

def main(args=None):                             # ROS2节点主入口main函数
    rclpy.init(args=args)                        # ROS2 Python接口初始化
    node = Node("node_helloworld")               # 创建ROS2节点对象并进行初始化
    
    while rclpy.ok():                            # ROS2系统是否正常运行
        node.get_logger().info("Hello World")    # ROS2日志输出
        time.sleep(0.5)                          # 休眠控制循环时间
    
    node.destroy_node()                          # 销毁节点对象    
    rclpy.shutdown()                             # 关闭ROS2 Python接口

注意需要在setup.py中声明节点的入口

'node_helloworld       = learning_node.node_helloworld:main',表示节点在learning_node文件夹的node_helloworld文件的main函数中

from setuptools import setup

package_name = 'learning_node'

setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='Hu Chunxu',
    maintainer_email='huchunxu@guyuehome.com',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
         'node_helloworld       = learning_node.node_helloworld:main',
         'node_helloworld_class = learning_node.node_helloworld_class:main',
         'node_object            = learning_node.node_object:main',
         'node_object_webcam     = learning_node.node_object_webcam:main',
        ],
    },
)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值