实用网站
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',
],
},
)
4034

被折叠的 条评论
为什么被折叠?



