Ros2完全入门指南(1):Ros2的概述与环境搭建
目录
1.3.3.1:新建 python 文件: (文件名自定义)
详细文档可参考:https://www.autolabor.com.cn/book/ROSTutorials/
赵虚左老师的开发文档,非常的全面完善,本教程仅作为补充
默认条件Ubuntu22.04+ROS2 Humble版本
1.1.安装ROS2
由于本机已经安装好了ROS2,所以我提供几种安装途径:
1.Codex安装:这是我认为最方便省事的安装方法,相信GPT就完事
2.小鱼的ROS2一键安装教程:小鱼的一键安装系列 | 鱼香ROS
也是非常好用的教程,但是我在安装过程中遇到了国内代理的连接问题,导致安装失败,所以转战Codex进行安装
1.2.测试ROS2
第一步:退出虚拟环境,因为 ROS 2 Humble 是通过 Ubuntu 系统环境安装的,而虚拟环境,尤其是 conda 环境,会改掉很多系统路径,可能导致 ROS 2 用到错误的 Python、库文件或依赖。
conda decavite
第二步:ROS2位置以及版本
which ros2
echo $ROS_DISTRO
第三步:查看是否启动了ROS 节点
ros2 topic list
如果输出是
/parameter_events
/rosout
则表示没有启动任何 ROS 节点
1.3.Hello world小测试
ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:
先创建一个工作空间;
再创建一个功能包;
编辑源文件;
编辑配置文件;
编译并执行。
1.3.1:创建工作空间并初始化
mkdir -p test/src
cd test
colcon build
编译成功后的结果是
src 放源码
build 编译过程文件
install 编译后的可执行文件、库、配置文件
log 编译日志
即使 Python 本身不用像 C++ 那样编译,ROS 2 仍然需要通过 colcon build 把包安装/注册到 install/ 目录中。
例如你的 Python 节点可能是:
src/my_package/my_package/my_node.py
如果没有编译安装,ROS 2 可能不知道这个 package 和 node 在哪里。
编译完成之后还需要
source install/setup.bash
否则 ROS 2 可能找不到这个包。
1.3.2:进入 src 创建 ros 包并添加依赖
果你想创建一个 ROS 2 Python 包,用:
cd ~/test/src
ros2 pkg create my_robot_control --build-type ament_python --dependencies rclpy std_msgs
这里:
ament_python ROS 2 的 Python 构建类型
rclpy ROS 2 的 Python 接口库
std_msgs 标准消息类型
然后同样编译:
cd ~/test
colcon build
source install/setup.bash
1.3.3:进入 ros 包编辑 python 文件
1.3.3.1:新建 python 文件: (文件名自定义)
import rclpy
from rclpy.node import Node
class MyNode(Node):
def __init__(self):
super().__init__('my_node')
self.get_logger().info('ROS 2 Python node started.')
def main(args=None):
rclpy.init(args=args)
node = MyNode()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
1.3.3.2:为 python 文件添加可执行权限
chmod +x 自定义文件名.py
1.3.3.3:修改setup 文件
在里面找到:
entry_points={
'console_scripts': [
],
},
改成:
entry_points={
'console_scripts': [
'my_node = my_robot_control.my_node:main',
],
},
意思是:
my_node = ros2 run 时使用的节点名
my_robot_control.my_node = Python 文件路径
main = Python 文件里的 main() 函数
ROS 2 Python 包通过 setup.py 里的 console_scripts 注册可执行节点,setup.cfg 会告诉 setuptools 把脚本安装到对应位置,使 ros2 run 能找到它。
你的文件结构应该类似:
~/test_ws/src/my_robot_control/
├── package.xml
├── setup.py
├── setup.cfg
├── resource/
├── my_robot_control/
│ ├── __init__.py
│ └── my_node.py
└── test/
1.3.3.4:编译运行
然后编译:
cd ~/test
colcon build
source install/setup.bash
运行:
ros2 run my_robot_control my_node
结果:
ros2 run my_robot_control my_node
[INFO] [1782115573.778399780] [my_node]: ROS 2 Python node started.
1.4:Launch文件讲解
一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?
官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。
-
选定功能包右击 ---> 添加 launch 文件夹
-
选定 launch 文件夹右击 ---> 添加 launch 文件
-
编辑 launch 文件内容
-
<launch> <node pkg="helloworld" type="demo_hello" name="hello" output="screen" /> <node pkg="turtlesim" type="turtlesim_node" name="t1"/> <node pkg="turtlesim" type="turtle_teleop_key" name="key1" /> </launch>node ---> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标
-
运行 launch 文件
roslaunch 包名 launch文件名 -
运行结果: 一次性启动了多个节点
1.5:ROS2的相关指令总结
1.5.1:检查 ROS 2 环境
查看是否安装 ROS 2:
which ros2查看当前 ROS 2 发行版:
echo $ROS_DISTRO查看系统中安装了哪些 ROS 版本:
ls /opt/ros加载 ROS 2 Humble 环境:
source /opt/ros/humble/setup.bash让每次打开终端自动加载:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc
1.5.2:创建 ROS 2 工作空间
创建工作空间:
mkdir -p ~/test_ws/src cd ~/test_ws编译工作空间:
colcon build加载当前工作空间:
source install/setup.bash完整流程:
mkdir -p ~/test_ws/src cd ~/test_ws colcon build source install/setup.bash如果编译出错,清理后重新编译:
rm -rf build install log colcon build
1.5.3:创建 ROS 2 功能包
1. 创建 Python 包
cd ~/test_ws/src ros2 pkg create my_package --build-type ament_python --dependencies rclpy std_msgs适合写 Python 节点。
创建后编译:
cd ~/test_ws colcon build source install/setup.bash
1.5.4:运行 ROS 2 节点
运行某个包中的节点:
ros2 run 包名 节点名例如:
ros2 run demo_nodes_cpp talker另开一个终端运行:
ros2 run demo_nodes_py listener注意,每开一个新终端,都需要加载 ROS 2 环境:
source /opt/ros/humble/setup.bash source ~/test_ws/install/setup.bash
1.5.5:话题 topic 相关指令
查看所有话题:
ros2 topic list查看话题详细信息:
ros2 topic info /topic_name查看某个话题正在发布的数据:
ros2 topic echo /topic_name查看话题发布频率:
ros2 topic hz /topic_name查看话题带宽:
ros2 topic bw /topic_name手动发布话题:
ros2 topic pub /topic_name std_msgs/msg/String "{data: 'hello'}"例如:
ros2 topic pub /chatter std_msgs/msg/String "{data: 'hello ros2'}"
1.5.6:节点 node 相关指令
查看当前所有节点:
ros2 node list查看某个节点信息:
ros2 node info /node_name例如:
ros2 node info /talker
1.5.7:服务 service 相关指令
查看所有服务:
ros2 service list查看服务类型:
ros2 service type /service_name查看某个服务的接口格式:
ros2 interface show 服务类型调用服务:
ros2 service call /service_name 服务类型 "参数"例如:
ros2 service call /clear std_srvs/srv/Empty "{}"
1.5.8:参数 parameter 相关指令
查看节点参数:
ros2 param list查看某个节点的参数:
ros2 param list /node_name获取参数值:
ros2 param get /node_name 参数名设置参数值:
ros2 param set /node_name 参数名 参数值例如:
ros2 param set /my_node use_sim_time true
1.5.9:接口 interface 相关指令
查看所有消息、服务、动作类型:
ros2 interface list查看某个消息类型的结构:
ros2 interface show std_msgs/msg/String查看某个服务类型的结构:
ros2 interface show std_srvs/srv/Empty常见接口类型:
std_msgs/msg/String std_msgs/msg/Int32 std_msgs/msg/Float64 geometry_msgs/msg/Twist sensor_msgs/msg/Image sensor_msgs/msg/JointState
1.5.10:launch 启动文件
运行 launch 文件:
ros2 launch 包名 launch文件名.py例如:
ros2 launch my_robot_bringup bringup.launch.py查看某个包路径:
ros2 pkg prefix 包名查看某个包的可执行节点:
ros2 pkg executables 包名
1.5.11:包 package 相关指令
查看所有 ROS 2 包:
ros2 pkg list查找某个包:
ros2 pkg list | grep 包名查看包路径:
ros2 pkg prefix 包名查看包中的可执行程序
ros2 pkg executables 包名例如:
ros2 pkg executables demo_nodes_cpp
1.5.12:常用调试指令
查看 ROS 2 命令帮助:
ros2 --help查看某个子命令帮助:
ros2 topic --help ros2 node --help ros2 service --help查看当前环境变量:
printenv | grep ROS查看 Python 路径:
which python3查看 colcon 是否安装:
which colcon如果没有 colcon:
sudo apt update sudo apt install python3-colcon-common-extensions
1.6:常见工作流程
以后你创建一个 ROS 2 Python 包,可以这样做:
source /opt/ros/humble/setup.bash
mkdir -p ~/test_ws/src
cd ~/test_ws/src
ros2 pkg create my_robot_control --build-type ament_python --dependencies rclpy std_msgs
cd ~/test_ws
colcon build
source install/setup.bash
查看包是否创建成功:
ros2 pkg list | grep my_robot_control
运行节点:
ros2 run my_robot_control 节点名
最核心需要记住这几类:
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash
ros2 run 包名 节点名
ros2 launch 包名 launch文件.py
ros2 topic list
ros2 topic echo /话题名
ros2 node list
ros2 service list
ros2 pkg list更多推荐


所有评论(0)