ROS2¶
培养解决问题的能力
Coding is really just problem-solving, Don't be a programmer,be a problem-solver.
写代码并不难,难得是如何解决问题,如何正确的解决问题,如何用简单高效的方案解决正确问题。
编程其实只是一个工具,一个把任务自动化的工具。学习编程是为了解决现实中的问题的。
学习新语言也是为了更高效更便捷的解决某个问题, 在问题解决之前,往往需要不断的调查,重写。
所以编程,是在培养我们自己去发现问题、解决问题的能力.而这个能力也可以运用到生活的方方面面,永远不过时。
- Galactic
-
docker pull osrf/ros:galactic-desktop
- doTransform
- Build
colcon build --symlink-install --packages-select-by-dep socketcan_bridge
colcon build --symlink-install --packages-select socketcan_bridge
- Node
# 检查 turtlesim 是否已经安装
ros2 pkg executables turtlesim
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
ros2 run <package_name> <executable_name>
ros2 node list
ros2 node info <node_name>
# 重映射
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
ros2 lifecycle set <nodename> shutdown # kill node 有待验证
- Topic
ros2 topic list
ros2 topic list -t
ros2 topic echo /turtle1/cmd_vel
# 主题信息
# ros2 topic info /turtle1/cmd_vel
# 消息类型
ros2 msg show std_msgs/String # dashing
ros2 interface show std_msgs/String # galactic
# 消息频率
ros2 topic hz /turtle1/pose
# 消息发布
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" # 1 Hz
ros2 topic pub --once /sent_messages can_msgs/msg/Frame \
"{header: { frame_id: 'map'} , id: 15, is_rtr: 0,is_extended: 0, is_error: 0, dlc: 8, data: [1,2,3,4,5,6,7,9]}"
ros2 topic pub --once /sent_messages can_msgs/msg/Frame \
"{header: {stamp: {sec: 0, nanosec: 0}, frame_id: 'map'} , id: 15, is_rtr: 0,is_extended: 0, is_error: 0, dlc: 8, data: [1,2,3,4,5,6,7,9]}"
- Services
- Parameters
ros2 param list
ros2 param get <node_name> <parameter_name>
ros2 param set <node_name> <parameter_name> <value>
ros2 param dump <node_name>
ros2 param load <node_name> <parameter_file>
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
- Actions
- Recording adn playing back data
ros2 bag record <topic_name>
ros2 bag record /turtle1/cmd_vel
ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
ros2 bag info <bag_file_name>
ros2 bag play subset
git clone https://github.com/ros2/examples.git
git clone https://hub.fastgit.org/ros2/examples.git
---
LGSVL¶
galactic¶
apt-get install ros-galactic-lgsvl-msgs
mkdir -p ros2_ws/src
git clone -b galactic-devel https://github.com/lgsvl/ros2-lgsvl-bridge.git ros2_ws/src/ros2-lgsvl-bridge
cd ros2_ws
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Release'
. ~/ros2-lgsvl-bridge/install/setup.bash
lgsvl_bridge [--port 9090] [--log D]
-
- 为什么选用ROS 2?(Why ROS 2?)
- Ubuntu 20.04中从源代码编译安装ROS 2相关软件包的通用步骤
- 在Ubuntu 20.04上从源代码构建ROS 2最新发行版Galactic过程中遇到的问题及解决办法
- ROS 2概念
- 二、核心堆栈开发人员概念——是一些更为详细的概念文章,适用于计划修改ROS 2核心或为ROS 2核心做出贡献的开发人员,包括以下内容:
- ROS 2教程目录及各教程文章的知乎链接
- 入门教程
- 演示教程
- (一)——使用服务质量设置来处理有损网络
- (二)——具有管理生命周期的节点管理
- (三)——高效的进程内通信
- ROS1 和 ROS2之间的桥接通信
- 使用 ROS1 桥接器的rosbag记录和回放话题数据
- 使用ROS 2的Turtlebot 2演示
- 使用ROS 2的TurtleBot 3演示[社区贡献]
- MoveIt 2机械臂移动规划演示
- (四)——在ROS 2上仿真TurtleBot 3机器人[社区贡献]
- (五)——在robot_state_publisher 节点中使用URDF
- (六)——尝试虚拟机器人演示
- (七)——在ROS 2中使用tf2
- (八)——TurtleBot 3导航仿真[社区贡献]
- (九)——TurtleBot 3 SLAM仿真[社区贡献]
- (十)——使用DDS-Security
- (十一)——日志记录和日志记录器配置演示
- (十二)——使用ROS 2 API编写实时安全代码
- ROS 2指南
- (一)——安装故障排除
- (二)——开发ROS 2软件包
- (三)——ament_cmake用户文档
- (四)——将ROS 1启动文件迁移到ROS 2
- (五)——将YAML参数文件从ROS 1迁移到ROS 2
- (六)——通过命令行将ROS参数传递给节点
- (七)——同步与异步服务端/客户端的对比
- (八)——DDS调优信息
- (九)——rosbag2:覆写QoS策略
- (十)——使用多个ROS 2中间件实现
- (十一)——交叉编译
- (十二)——用bloom发布ROS 2软件包
- (十三)——在ROS 2中使用Python软件包
- (十四)——将RQt插件移植到Windows系统上
- (十五)——在Docker中运行ROS 2节点[社区贡献]
- (十六)——ROS 2软件包维护者指南
- (十七)——构建自定义Debian软件包
- (十八)——从源代码构建RQt
- tf2系列教程
- tf2系列教程(一):tf2简介
- tf2系列教程(二):在ROS 2中进行tf2简介演示
- tf2系列教程(三):在ROS 2中编写tf2静态广播者节点(Python)
- tf2系列教程(四):在ROS 2中编写tf2广播者节点(Python)
- tf2系列教程(五):编写tf2侦听者节点(Python)
- tf2系列教程(六):添加固定坐标系(Python)
- tf2系列教程(七):添加移动坐标系(Python)
- tf2系列教程(八):了解ROS 2中的tf2和时间(Python)
- tf2系列教程(十):四元数基础
- tf2系列教程(十一):在ROS 2中编写tf2静态广播者节点(C++)
- tf2系列教程(十二):在ROS 2中编写tf2广播者节点(C++)
- tf2系列教程(十三):在ROS 2中编写tf2侦听者节点(C++)
- tf2系列教程(十四):在ROS 2中添加固定坐标系(C++)
- tf2系列教程(十五):在ROS 2中添加移动坐标系(C++)
- tf2系列教程(十六):了解ROS 2中的tf2和时间(C++)
- tf2系列教程(十七):ROS 2中使用tf2进行时间旅行(C++)
- tf2系列教程(九):ROS 2中使用tf2进行时间旅行(Python)
- tf2系列教程(十八):在ROS 2中调试tf2的问题
- tf2系列教程(十九): 在ROS 2中使用tf2_ros::MessageFilter处理Stamped数据类型(之一)——发布相机的PointStamped消息
- tf2系列教程(十九):在ROS 2中使用tf2_ros::MessageFilter处理Stamped数据类型(之二)——侦听和使用PointStamped消息
- 在ROS 2中从零开始编写相机位置消息发布与订阅节点(Python)
- 关于在Github上完成拉取请求(PR)后对两篇“tf2系列教程(十九)”文章中的代码进行更新的说明
- ROS2 中使用RViz2显示数据
- ROS2 中用RViz 2可视化PointCloud2数据(一)
- ROS 2中用RViz 2可视化PointCloud2数据(二)
- ROS 2中用RViz 2可视化PointCloud2数据(三)
- ROS 2中用RViz 2仿真机械臂
- MoveIt2教程
- 在Ubuntu 20.04系统中从源代码构建MoveIt 2
- MoveIt2教程(一):MoveIt2简介
- MoveIt2教程(二):MoveIt2软件安装
- MoveIt2教程(三):MoveIt2基本概念
- MoveIt2教程(四):MoveIt2中可用的规划器
- MoveIt2教程(五):插件接口
- MoveIt2教程(六):在RViz中快速上手MoveIt2
- MoveIt2教程(七):Move Group C++接口
- MoveIt2教程(八):机器人模型和机器人状态
- MoveIt2教程(九):规划场景
- MoveIt2教程(十):规划场景监视器
- MoveIt2教程(十一):规划场景ROS API
- MoveIt2教程(十二):MoveItCpp教程
- MoveIt2教程(十三):URDF与SRDF
- MoveIt2教程(十四):实时机械臂伺服
- ROS2中的URDF系列教程
- ROS2中的URDF系列教程(一):从零开始用URDF构建视觉机器人模型
- ROS2中的URDF系列教程(二):用URDF构建移动机器人模型
- ROS2中的URDF系列教程(三):向URDF模型添加物理和碰撞属性
- ROS2中的URDF系列教程(四):使用Xacro整理URDF文件
- ROS2中的URDF系列教程(五):如何在ROS 2中使用URDF创建仿真移动机器人(之一)
- ROS2中的URDF系列教程(五):如何在ROS 2中使用URDF创建仿真移动机器人(之二)
- ROS2中的URDF系列教程(六):ROS 2中如何将URDF加载到RViz
- ROS2中的URDF系列教程(七):ROS 2中如何将URDF加载到Gazebo
- ROS2中的URDF系列教程(八):如何将包含Xacro的URDF文件转换成SDF文件
- ROS2中的URDF系列教程(九):理解PR2机器人的URDF描述
- ROS2中的URDF系列教程(十):URDF XML规程(之一)
- ROS2中的URDF系列教程(十):URDF XML规程(之二)
- ROS2中的URDF系列教程(十):URDF XML规程(之三)
- ROS2中的URDF系列教程(十):URDF XML规程(之四)
- ROS2中的URDF系列教程(十):URDF XML规程(之五)
- ROS 2 Foxy发行版官方文档体系结构发生了变化
- ROS 2文档中的术语词汇表
- 机器人操作系统ROS 2系列文档中译版即将陆续发布
- 对第二代机器人操作系统ROS 2 的一些理解小结——五问ROS 2
- Gazebo 11新手课程指南——初级教程
- Gazebo 11新手课程指南——初级教程(一)
- Gazebo 11新手课程指南——初级教程(二)
- Gazebo 11新手课程指南——初级教程(三)
- Gazebo 11新手课程指南——初级教程(四)
- Gazebo 11新手课程指南——初级教程(五)
- Gazebo 11新手课程指南——初级教程(六)
- Gazebo 11新手课程指南——中级教程(一)
- Gazebo 11新手课程指南——中级教程(二)
- Gazebo 11新手课程指南——中级教程(三)
- Gazebo 11新手课程指南——中级教程(四)
- Gazebo 11新手课程指南——中级教程(五)
- 开源机器人:上手Gazebo和ROS 2
- 机器人仿真实战——使用Gazebo11和ROS2进行仓库移动机器人仿真(一)
- 机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(二)
- 机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(三)
- 机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(四)
- 机器人仿真实战——使用Gazebo 11和ROS 2进行仓库移动机器人仿真(五)
- Gazebo 11分类教程——开始使用Gazebo(一)
- Gazebo 11分类教程——开始使用Gazebo(二)
- Gazebo 11分类教程——开始使用Gazebo(三)
- Gazebo 11分类教程——构建机器人(一)
- Gazebo 11分类教程——构建机器人(二)
- Gazebo 11分类教程——构建机器人(三)
- Gazebo 11分类教程——构建机器人(四)
- Gazebo 11分类教程——构建机器人(五)
- Gazebo 11分类教程——构建机器人(六)
- Gazebo 11分类教程——构建机器人(七)
- Gazebo 11分类教程——构建机器人(八)
- Gazebo 11分类教程——构建机器人(九)
- Gazebo 11分类教程——构建机器人(十)
- Gazebo 11分类教程——构建机器人(十一)
- Gazebo 11分类教程——构建机器人(十二)
- Gazebo 11分类教程——构建机器人(十三)
- Gazebo 11分类教程——构建机器人(十四)
- Gazebo 11分类教程——构建机器人(十五)
- Gazebo 11分类教程——构建仿真世界(一)
- Gazebo 11分类教程——构建仿真世界(二)
- Gazebo 11分类教程——构建仿真世界(三)
- Gazebo 11分类教程——构建仿真世界(四)
- Gazebo 11分类教程——构建仿真世界(五)
- Gazebo 11分类教程——编写插件(一)
- Gazebo 11分类教程——编写插件(二)
- Gazebo 11分类教程——编写插件(三)
- Gazebo 11分类教程——编写插件(四)
- Gazebo 11分类教程——编写插件(五)
- Gazebo 11分类教程——Gazebo中自带的插件(一)
- Gazebo 11分类教程——Gazebo中自带的插件(二)
- Gazebo 11分类教程——Gazebo中自带的插件(三)
- Gazebo 11分类教程——Gazebo中自带的插件(四)
- Gazebo 11分类教程——Gazebo中自带的插件(五)
- Gazebo 11分类教程——Gazebo中自带的插件(六)
- Gazebo 11分类教程——Gazebo中自带的插件(七)
- Gazebo 11分类教程——Gazebo中自带的插件(八)
- Gazebo 11分类教程——传感器(一)
- Gazebo 11分类教程——传感器(二)
- Gazebo 11分类教程——传感器(三)
- Gazebo 11分类教程——传感器(四)
- Gazebo 11分类教程——传感器(五)
- Gazebo 11分类教程——传感器(六)
- Gazebo 11分类教程——传感器(七)
- Gazebo 11分类教程——工具与实用程序(一)
- Gazebo 11分类教程——工具与实用程序(二)
- Gazebo 11分类教程——工具与实用程序(三)
- Gazebo 11分类教程——工具与实用程序(四)
- Gazebo 11分类教程——工具与实用程序(五)
- Gazebo 11分类教程——工具与实用程序(六)
- Gazebo 11分类教程——使用数学库&模型编辑器
- Gazebo 11分类教程——传输库(一)
- Gazebo 11分类教程——传输库(二)
- Gazebo 11分类教程——物理库Physics Library(一)
- Gazebo 11分类教程——物理库Physics Library(二)
- Gazebo 11分类教程——物理库Physics Library(三)
- Gazebo 11分类教程——物理库Physics Library(四)
- Gazebo 11分类教程——物理库Physics Library(五)
- Gazebo 11分类教程——物理库Physics Library(六)
- Gazebo 11分类教程——物理库Physics Library(七)
- Gazebo 11分类教程——物理库Physics Library(八)
- Gazebo 11分类教程——渲染库(一)
- Gazebo 11分类教程——渲染库(二)
- Gazebo 11分类教程——渲染库(三)
- Gazebo 11分类教程——连接至ROS 2(一)
- Gazebo 11分类教程——连接至ROS 2(二)
- Gazebo 11分类教程——连接至ROS 2(三)
- Navigation 2系列教程
- (一)——Navigation 2概述
- (二)——开始使用Nav2
- (三)——构建和安装Nav2
- (四)——移动机器人导航概念
- (五)——机器人首次设置Nav2指南之一:设置TF
- (五)——机器人首次设置Nav2指南之二:设置URDF
- (五)——机器人首次设置Nav2指南之三:设置里程计(Odometry)
- (六)——普通教程之一:使用ROS 2进行相机标定
- (六)——普通教程之二:在ROS 2/Nav2中获取错误回溯信息
- (六)——普通教程之三:使用Turtlebot3物理机器人进行导航
- (六)——普通教程之四:使用SLAM制图的同时进行导航
- (六)——普通教程之五:使用外部的STVL成本地图插件进行导航
- (六)——普通教程之六:动态物体跟随
- (六)——普通教程之七: 使用禁区进行导航
- (六)——普通教程之八:使用速度限制进行导航
- (七)——插件教程之一:编写新的Costmap2D插件
- (七)——插件教程之二:编写新的规划器(Planner)插件
- (七)——插件教程之三:编写新的控制器(Controller)插件
- (七)——插件教程之四:编写新的行为树(Behavior Tree)插件
- (七)——插件教程之五:编写新的恢复器(Recovery)插件
- (八)——配置指南之一:配置航点跟随者(Waypoint Follower)
- (八)——配置指南之二:配置行为树导航仪(Behavior-Tree Navigator)
- (八)——配置指南之三:配置行为树XML节点(Behavior Tree XML Nodes)
- (八)——配置指南之四:配置Costmap 2D
- (八)——配置指南之五:配置生命周期管理器(Lifecycle Manager)
- (八)——配置指南之六:配置规划器服务器(Planner Server)
- (八)——配置指南之七:配置NavFn规划器
- (八)——配置指南之八:配置Smac规划器
- (八)——配置指南之九:配置Theta*规划器(Theta Star Planner)
- (八)——配置指南之十:配置控制器服务器(Controller Server)
- (八)——配置指南之十一:配置DWB控制器(DWB Controller)
- (八)——配置指南之十二:配置地图服务器/保存器(Map Server/Saver)
- (八)——配置指南之十三:配置AMCL
- (八)——配置指南之十四:配置恢复器服务器(Recovery Server)
- (八)——配置指南之十五:配置受管制纯追踪(Regulated Pure Pursuit)控制器
- (九)——行为树XMLs之一:概述
- (九)——行为树XMLs之二:导航至某个位姿(Navigate To Pose)行为树
- (九)——行为树XMLs之三:通过多个位姿导航(Navigate Through Poses)行为树
- (九)——行为树XMLs之四:跟随动态点(Follow Dynamic Point)行为树
- (十)——导航插件(Navigation Plugins)
- (十一)——简单指挥官(Simple Commander)API