一级倒立摆控制 —— ROS2 仿真

简介: 一级倒立摆控制 —— ROS2 仿真

项目描述

该项目的目的是利用 ROS2 框架展示实时功能。本项目基于开放机器人组织之前的工作。本项目以这些软件包为基础。

这就是使用倒立摆进行实时演示的动机:

实时计算通常解决的控制问题的一个典型例子是平衡倒立摆。如果控制器意外地阻塞很长时间,摆就会倒下或变得不稳定。但是,如果控制器可靠地以比控制摆锤的电机运行速度更快的速度更新,摆锤就会成功地适应传感器数据,从而达到平衡摆锤的目的。


有关项目设计演示的详细介绍,请点击此处: 设计文章


一、安装说明

mkdir -p ~/pendulum_ws/src
cd ~/pendulum_ws/src
git clone -b foxy https://github.com/ros2-realtime-demo/pendulum.git
cd ~/pendulum_ws/
colcon build

二、如何运行演示程序

1. Source 工作空间

如果从源代码安装:

cd ~/pendulum_ws
source ./install/setup.bash

2. 启动演示程序

关于运行演示的所有可能选项的完整解释,请参阅教程文件:教程

为了进行快速测试,请启用 rviz 启动演示程序:

ros2 launch pendulum_bringup pendulum_bringup.launch.py rviz:=True
[INFO] [launch]: All log files can be found below /home/kuanli/.ros/log/2023-10-20-18-38-39-935958-kuanli-3634
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [3635]
[INFO] [pendulum_demo-2]: process started with pid [3637]
[INFO] [rviz2-3]: process started with pid [3639]
[INFO] [pendulum_state_publisher-4]: process started with pid [3641]
[robot_state_publisher-1] [INFO] [1697798320.043931055] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1697798320.043982777] [robot_state_publisher]: got segment bearing
[robot_state_publisher-1] [INFO] [1697798320.043987181] [robot_state_publisher]: got segment cart
[robot_state_publisher-1] [INFO] [1697798320.043989438] [robot_state_publisher]: got segment pole
[robot_state_publisher-1] [INFO] [1697798320.043991703] [robot_state_publisher]: got segment pole_mass
[robot_state_publisher-1] [INFO] [1697798320.043993775] [robot_state_publisher]: got segment wheel_l_back_link
[robot_state_publisher-1] [INFO] [1697798320.043995904] [robot_state_publisher]: got segment wheel_l_front_link
[robot_state_publisher-1] [INFO] [1697798320.043998008] [robot_state_publisher]: got segment wheel_r_back_link
[robot_state_publisher-1] [INFO] [1697798320.043999934] [robot_state_publisher]: got segment wheel_r_front_link
[robot_state_publisher-1] [INFO] [1697798320.044001901] [robot_state_publisher]: got segment world
[pendulum_demo-2] [INFO] [1697798320.044821446] [pendulum_controller]: Configuring
[pendulum_demo-2] [INFO] [1697798320.044873711] [pendulum_controller]: Activating
[pendulum_demo-2] [INFO] [1697798320.044884645] [pendulum_driver]: Configuring
[pendulum_demo-2] [INFO] [1697798320.044894735] [pendulum_driver]: Activating
[rviz2-3] [INFO] [1697798320.202078066] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-3] [INFO] [1697798320.202170972] [rviz2]: OpenGl version: 4.6 (GLSL 4.6)
[rviz2-3] [INFO] [1697798320.221277601] [rviz2]: Stereo is NOT SUPPORTED

如果一切顺利,您应该可以在 rviz 中看到倒立摆受到控制:

查看话题:

ros2 topic list

/clicked_point
/disturbance
/initialpose
/joint_command
/joint_states
/move_base_simple/goal
/parameter_events
/pendulum_controller/transition_event
/pendulum_driver/transition_event
/pendulum_joint_states
/robot_description
/rosout
/teleop
/tf
/tf_static

使用 rqt_plot 实时可视化数据

ros2 run rqt_plot rqt_plot


使用 rqt_topic 实时查看话题信息

ros2 run rqt_topic rqt_topic

使用 rqt_graph 实时查看节点及话题

ros2 run rqt_graph rqt_graph


三、如何配置实时设置

配置演示版实时设置的说明可在此处找到。


四、代码阅读

4.1 查看节点

ros2 node list

/pendulum_controller
/pendulum_driver
/pendulum_state_publisher
/robot_state_publisher
/rviz2
/transform_listener_impl_55eb8906e3f0

4.2 查看话题消息及其类型

ros2 topic list

/clicked_point
/disturbance
/initialpose
/joint_command
/joint_states
/move_base_simple/goal
/parameter_events
/pendulum_controller/transition_event
/pendulum_driver/transition_event
/pendulum_joint_states
/robot_description
/rosout
/teleop
/tf
/tf_static
话题 类型
/disturbance pendulum2_msgs/msg/JointCommand
/joint_command pendulum2_msgs/msg/JointCommand
/pendulum_joint_states pendulum2_msgs/msg/JointState
/teleop pendulum2_msgs/msg/PendulumTeleop
/initialpose geometry_msgs/msg/PoseWithCovarianceStamped
/joint_states sensor_msgs/msg/JointState
/move_base_simple/goal geometry_msgs/msg/PoseStamped
/robot_description std_msgs/msg/String
/tf tf2_msgs/msg/TFMessage
/tf_static tf2_msgs/msg/TFMessage
/pendulum_controller/transition_event lifecycle_msgs/msg/TransitionEvent
/pendulum_driver/transition_event lifecycle_msgs/msg/TransitionEvent

ros2 interface show pendulum2_msgs/msg/JointCommand

# This represents a linear force applied to the pendulum cart along the X-axis
float64 force #沿 X 轴方向给小车施加的力

ros2 interface show pendulum2_msgs/msg/JointState

float64 pole_angle    #摆杆角度
float64 pole_velocity #摆杆速度
float64 cart_position #小车位置
float64 cart_velocity #小车速度
float64 cart_force    #小车受力

ros2 interface show pendulum2_msgs/msg/PendulumTeleop

# This represents the desired state of the pendulum for teleoperation
# 表示想要倒立摆达到的状态
float64 pole_angle    # 摆杆角度
float64 pole_velocity #摆杆速度
float64 cart_position #小车位置
float64 cart_velocity #小车速度

ros2 interface show geometry_msgs/msg/PoseWithCovarianceStamped

# This expresses an estimated pose with a reference coordinate frame and timestamp
# 这表示一个带有参考坐标系和时间戳的估计姿态

std_msgs/Header header
        builtin_interfaces/Time stamp
                int32 sec
                uint32 nanosec
        string frame_id
PoseWithCovariance pose
        Pose pose
                Point position
                        float64 x
                        float64 y
                        float64 z
                Quaternion orientation  # 四元数方位
                        float64 x 0
                        float64 y 0
                        float64 z 0
                        float64 w 1
        float64[36] covariance

ros2 interface show sensor_msgs/msg/JointState

# This is a message that holds data to describe the state of a set of torque controlled joints.
#
# The state of each joint (revolute or prismatic) is defined by:
#  * the position of the joint (rad or m),
#  * the velocity of the joint (rad/s or m/s) and
#  * the effort that is applied in the joint (Nm or N).

# 这是一条消息,其中包含描述一组扭矩控制关节状态的数据。
#
# 每个关节(旋转或平移关节)的状态由以下参数定义:
# 关节的位置(弧度或米)、
# 关节的速度(弧度/秒或米/秒)和
# 施加在关节上的力(力矩)值(牛顿米或牛顿)。

# Each joint is uniquely identified by its name
# The header specifies the time at which the joint states were recorded. All the joint states
# in one message have to be recorded at the same time.
#
# This message consists of a multiple arrays, one for each part of the joint state.
# The goal is to make each of the fields optional. When e.g. your joints have no
# effort associated with them, you can leave the effort array empty.
#
# All arrays in this message should have the same size, or be empty.
# This is the only way to uniquely associate the joint name with the correct
# states.

std_msgs/Header header
        builtin_interfaces/Time stamp
                int32 sec
                uint32 nanosec
        string frame_id

string[] name
float64[] position
float64[] velocity
float64[] effort

ros2 interface show tf2_msgs/msg/TFMessage

geometry_msgs/TransformStamped[] transforms
        #
        #
        std_msgs/Header header
                builtin_interfaces/Time stamp
                        int32 sec
                        uint32 nanosec
                string frame_id
        string child_frame_id
        Transform transform
                Vector3 translation
                        float64 x
                        float64 y
                        float64 z
                Quaternion rotation
                        float64 x 0
                        float64 y 0
                        float64 z 0
                        float64 w 1

ros2 interface show geometry_msgs/msg/Transform

# This represents the transform between two coordinate frames in free space.
# 这表示自由空间中两个坐标系之间的变换。三维平移向量和四元数表示的旋转向量。
Vector3 translation
        float64 x
        float64 y
        float64 z
Quaternion rotation
        float64 x 0
        float64 y 0
        float64 z 0
        float64 w 1


4.3 各节点与话题之间的关系

目录
相关文章
|
Ubuntu 机器人 API
ubuntu 16.04+ros kinetic + gazebo+ aws-robotics 室内环境导航仿真
ubuntu 16.04+ros kinetic + gazebo+ aws-robotics 室内环境导航仿真
299 0
|
1月前
|
数据可视化 算法 机器人
ROS2 - Gazebo 联合仿真项目模版
ROS2 - Gazebo 联合仿真项目模版
34 1
|
3月前
|
机器学习/深度学习 传感器 算法
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
强化学习(RL)在机器人领域的应用,尤其是结合ROS(Robot Operating System)和Gazebo(机器人仿真环境)
131 2
|
Ubuntu 机器人 定位技术
ros_gazebo/turtlebot3 室内仿真导航,提取camera/image和pose位姿真值,并将topic 时间同步对齐,最后制作成kitti 格式的数据集。
ros_gazebo/turtlebot3 室内仿真导航,提取camera/image和pose位姿真值,并将topic 时间同步对齐,最后制作成kitti 格式的数据集。
407 0
|
机器学习/深度学习 机器人 中间件
ubuntu16.04下ROS操作系统学习笔记(五)gazebo物理仿真环境搭建、加载服务端模型数据减少报错
ubuntu16.04下ROS操作系统学习笔记(五)gazebo物理仿真环境搭建、加载服务端模型数据减少报错
174 0
|
机器学习/深度学习 数据可视化 网络协议
ubuntu16.04下ROS操作系统学习笔记(二)命令工具了解和仿真小海龟
ubuntu16.04下ROS操作系统学习笔记(二)命令工具了解和仿真小海龟
236 0
|
传感器 XML 数据可视化
[ros robot] --- 机器人系统仿真
[ros robot] --- 机器人系统仿真
359 0
|
开发工具 git
ROS 环境下 安装 turtlebot3 功能包及其仿真包 并测试 —— 全流程(报错及解决)
ROS 环境下 安装 turtlebot3 功能包及其仿真包 并测试 —— 全流程(报错及解决)
ROS 环境下 安装 turtlebot3 功能包及其仿真包 并测试   —— 全流程(报错及解决)
|
传感器 C++
ROS仿真中 读取 turtlebot3 扫描雷达传感器数据 求 前方距离和最短距离(对应方向)
ROS仿真中 读取 turtlebot3 扫描雷达传感器数据 求 前方距离和最短距离(对应方向)
ROS仿真中  读取  turtlebot3  扫描雷达传感器数据  求 前方距离和最短距离(对应方向)
ros仿真 无人机航向控制算法优化
ros仿真 无人机航向控制算法优化
ros仿真 无人机航向控制算法优化

推荐镜像

更多