ROS1云课→17化繁为简stdr和f1tenth

2022-09-28 12:51:42 浏览数 (1)

ROS1云课→16机器人模型从urdf到xacro


蓝桥ROS云课可以使用Gazebo/V-Rep/Webots等三维仿真软件,这些都在之前博客中提及,或者有学生撰写对应博客进行分享。

二维的环境主要有:

  1. stage
  2. stdr
  3. f1tenth

分别看看这些二维仿真软件的效果吧^_^

stage: 

sudo apt install ros-kinetic-turtlebot-stage

roslaunch turtlebot_stage turtlebot_in_stage.launch

代码语言:javascript复制
<!-- 
  Turtlebot navigation simulation:
  - stage
  - map_server
  - move_base
  - static map
  - amcl
  - rviz view
 -->
<launch>
  <arg name="base"       default="$(optenv TURTLEBOT_BASE kobuki)"/>  <!-- create, rhoomba -->
  <arg name="stacks"     default="$(optenv TURTLEBOT_STACKS hexagons)"/>  <!-- circles, hexagons -->
  <arg name="3d_sensor"  default="$(optenv TURTLEBOT_3D_SENSOR kinect)"/>  <!-- kinect, asus_xtion_pro -->

  <!-- Name of the map to use (without path nor extension) and initial position -->
  <arg name="map_file"       default=" $(env TURTLEBOT_STAGE_MAP_FILE)"/> <!-- robopark_plan -->
  <arg name="world_file"     default=" $(env TURTLEBOT_STAGE_WORLD_FILE)"/>
  <arg name="initial_pose_x" default="2.0"/>
  <arg name="initial_pose_y" default="2.0"/>
  <arg name="initial_pose_a" default="0.0"/>

  <param name="/use_sim_time" value="true"/>
  <!--  ******************** Stage ********************  -->
  <!-- 
        Publishes transforms:
          /base_link -> /base_laser
          /base_footprint -> /base_link (identity)
          /odom -> base_footprint
        Publishes topics:
          /odom : odometry data from the simulated odometry
          /base_scan : laser data from the simulated laser
          /base_pose_ground_truth : the ground truth pose
        Parameters:
          base_watchdog_timeout : time (s) after receiving the last command on cmd_vel before stopping the robot
        Args:
          -g : run in headless mode.
  --> 
  <node pkg="stage_ros" type="stageros" name="stageros" args="$(arg world_file)">
    <param name="base_watchdog_timeout" value="0.5"/>
    <remap from="odom" to="odom"/>
    <remap from="base_pose_ground_truth" to="base_pose_ground_truth"/>
    <remap from="cmd_vel" to="mobile_base/commands/velocity"/>
    <remap from="base_scan" to="scan"/>
  </node>

  <!--  ***************** Robot Model *****************  -->
  <include file="$(find turtlebot_bringup)/launch/includes/robot.launch.xml">
    <arg name="base" value="$(arg base)" />
    <arg name="stacks" value="$(arg stacks)" />
    <arg name="3d_sensor" value="$(arg 3d_sensor)" />
  </include>
  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
    <param name="use_gui" value="true"/>
  </node>

  <!-- Command Velocity multiplexer -->
  <node pkg="nodelet" type="nodelet" name="mobile_base_nodelet_manager" args="manager"/>
  <node pkg="nodelet" type="nodelet" name="cmd_vel_mux" args="load yocs_cmd_vel_mux/CmdVelMuxNodelet mobile_base_nodelet_manager">
    <param name="yaml_cfg_file" value="$(find turtlebot_bringup)/param/mux.yaml"/>
    <remap from="cmd_vel_mux/output" to="mobile_base/commands/velocity"/>
  </node>

  <!--  ************** Navigation  ***************  -->
  <include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>

  <!--  ****** Maps *****  -->
  <node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)">
    <param name="frame_id" value="/map"/>
  </node>

  <include file="$(find turtlebot_navigation)/launch/includes/amcl/amcl.launch.xml">
    <arg name="scan_topic" value="scan"/>
    <arg name="use_map_topic" value="true"/>
    <arg name="initial_pose_x" value="$(arg initial_pose_x)"/>
    <arg name="initial_pose_y" value="$(arg initial_pose_y)"/>
    <arg name="initial_pose_a" value="$(arg initial_pose_a)"/>
  </include>

  <!--  **************** Visualisation ****************  -->
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find turtlebot_stage)/rviz/robot_navigation.rviz"/>
</launch>
代码语言:javascript复制
export TURTLEBOT_STAGE_MAP_FILE=/opt/ros/kinetic/share/turtlebot_stage/maps/maze.yaml 

export TURTLEBOT_STAGE_WORLD_FILE=/opt/ros/kinetic/share/turtlebot_stage/maps/stage/maze.world 

stdr:

sudo apt install ros-kinetic-stdr*

蓝桥ROS机器人之STDR沿墙跑_zhangrelay的博客-CSDN博客_ros沿墙跟随

f1tenth:

蓝桥ROS之f1tenth案例学习与调试(成功)_zhangrelay的博客-CSDN博客

这个需要源码编译。支持ROS1/2所有主流版本。


机器人技术路线图(机器翻译)

机器人技术是一个广阔的领域,通常包括从机器学习到物理学等许多其他学科重叠交叉。对于初学者来说,这可能非常令人生畏,又称之为学习曲线十分陡峭。为了更容易上手,收集了以下资源。还可以在各类网站上找到更多资源。

一个共同的开始(入门)

作为初学者,最重要的是开始学习一门语言,因为它在项目和要做的事情方面提供了很多机会。还要记住,一旦熟悉一种语言,很快就可以相对容易地掌握另一种语言。触类旁通!

在机器人技术中,不同的语言有不同的用途:

  1. 自动化 机器学习:C 和 python
  2. 嵌入式系统和电子学:C
  3. 建模:python、MATLAB

建议从python或C/C 开始,编程语言基础!了解两者对于先进的机器人技术非常重要。

如下可以着手开始的一些路径:

  1. Python网络教程
  2. C视频教程
  3. C 网络教程
  4. MATLAB & Simulink
  5. 使用Git进行版本控制

开发环境

编写代码不仅仅是在文本编辑器中输入那么简单。通常还涉及许多其他组件,例如编译器、外部库、路径环境、终端、版本控制、文档等……如果不知道这些东西的含义,请不要担心,它们通常被称为开发环境。首先,请确保对以下内容熟悉:

  • Linux 操作系统:Linux 是一个开源操作系统——这意味着任何人都可以查看并建议对其源代码进行更改。它有许多变体,Ubuntu 是初学者的推荐选择。由于它与许多用于编程机器人(以及一般开发)的工具紧密集成,因此必须能够访问 linux(通过双引导、虚拟机或WSL)。
  • Linux 终端:虽然大多数人都熟悉基于指向和单击的 Windows 界面,但计算机最初是作为终端开始的 - 必须输入的基于文本的提示。终端仍然用于软件开发中的几乎所有内容,并且是一项基本技能。
  • Git:在处理复杂代码或作为团队的一员时,跟踪代码的更改变得非常重要。Git 提供了一种方法来做到这一点以及更多。近年来,GitHub 和 GitLab 等平台已成为开源社区的基石。
  • ……

电子部分

机器人的电子部分可分为 3 个部分:微控制器、传感器和执行器。传感器和执行器(通过驱动程序)与微控制器连接,形成机器人的电子系统。基本电子元件(如电线、电阻器、电容器)用于接口,整个组件安装在面包板、原型板或印刷电路板上(基于项目阶段)。

要开始学习微控制器(结构、布局、如何编程),建议从学习 Arduino 开始。Arduino是一种低成本、开源且易于学习的微控制器。用于对 Arduino 进行编程的语法类似于 C/C 的语法,并且使用称为Arduino IDE的软件对其进行编程。Arduino 有自己的一套官方教程。还有关于 Arduino IDE 的基本教程和更多信息。有一个在线模拟器可以模拟 Arduino 项目,叫做TinkedCad,可用于不愿意购买 Arduino 板情况。

在学习 Arduino 并了解有关微控制器工作的基本概念后,可以深入了解其他微控制器,如ESP32 (CoCube)等。

传感器是机器人用来获取环境信息的电子元件。传感器的一些例子是车轮编码器、温度传感器、深度相机(Kinect)、激光雷达、超声波传感器等。另一方面,执行器是机器人用来改变环境的组件。前任。电机(直流、步进、伺服、BLDC)、线性执行器(螺线管或线性伺服)等。由于微控制器和执行器的功率预算不同,执行器使用驱动器与微控制器连接。

连接后,可能希望将其组装在原型板甚至 PCB 上(用于长期使用)。一个名为EAGLE的软件用于设计 PCB。可以从AutoDesk的官方网站免费下载和安装。

自动化

机器人操作系统(ROS)

想一想你可以如何让一个像人类一样的机器人在家里提供帮助。写一个大程序来控制它的所有行为(导航、运动、障碍物检测、电池监控、语音处理等)吗?更聪明的做法是为每个可以相互通信的程序设置更小的独立程序(即一个程序用于四​​处走动,一个用于交谈,一个用于拾取东西等)。现在出现的问题是这些单独的程序将如何通信。机器人操作系统为此提供了解决方案。它不是一个实际的操作系统,而是一个使通信和协调更容易的框架。

要设置ROS 环境,请查看:

ROS官方教程。概念以简洁的方式给出,并给出了大量示例代码(Python 和 C )以供理解。

如果有具体问题,请尝试使用搜索。其他人之前可能已经问过许多问题,并且可能会在ROS Answers上找到答案。

路径规划

路径规划是通过避开障碍物或遵循机器人的设定动态或运动学约束来“寻找”机器人路径或轨迹的过程。从字面上看,这是人类非常本能地做的事情,但是机器人发现这很困难,试图通过使用一些可以称为路径规划算法的算法使它们“智能”。路径规划在机器人自动化中起着不可或缺的作用,因为大多数机器人都必须规划路径。即使在机械臂的情况下,将末端执行器从给定的空间坐标移动到另一个给定的空间坐标也需要手臂必须遵循的“轨迹规划”。然而,用于规划路径或轨迹的约束和维度与用于规划地面机器人的约束和维度不同。

大多数旧的规划算法都有很多实现。

  • A Star和Dijkstra等基于图形的算法
  • 有关基于采样的算法 - RRT

但是,要查找算法的一些实现,可以参考Open Motion Planning Library了解算法的行业级实现。(OMPL 是用 C/C 编写,请注意!!)。

同步定位和地图构建 (SLAM)

顾名思义,SLAM 实现的是在一个环境中同时进行建图和定位。从历史上看,地图绘制和定位都是单独完成的。同时做这两件事会带来一些困难。线性代数和概率统计对于更好地理解非常重要。

机器人感知

机器人感知是初学者真正低估的东西,因为它背后的困难没有被正确理解。对于机器人而言,很难理解从三维世界中查看、分析和提取有用数据的难度,因为人类非常擅长以最精确的方式拾取和放置我们面前的物体。很容易避免在行走时被树枝绊倒(当然,如果看到它的话)。但对于机器人来说,这同样是非常复杂的。机器人感知专门处理制造智能机器人的这一方面。

要了解机器人如何感知环境,需要了解深度图,如何创建它以及它的用途。使用深度图是分析三维 环境的经典方法之一。

传感器在任何机器人任务中都发挥着重要作用。使用高质量的相机、激光雷达等。要开始使用图像进行感知,OpenCV 是一个很好的起点。对于使用点云进行感知,点云库是一个很好的起点(PCL 只能使用 C )。

有许多进步正在发生。随着神经网络的出现,卷积神经网络(CNN)被用于从深度图中提取和分析重要信息,从而实现图像和点云分割、分类任务等。

机器学习/人工智能

一方面使用许多基于计算机的工具都遵循相同的原则——它们是计算机遵循的简单指令的集合,以便它可以解决任务。另一方面,机器学习是关于计算机如何从示例中学习解决任务,就像人类学习的那样。

Andrew Ng 的经典机器学习课程通常是一个不错的起点。注意练习是在 Octave/MATLAB 中,但建议在 python 中尝试。

deeplearning.ai 的深度学习是 Andrew NG 的一门更高级的课程,专注于深度学习。

完成上述一项后,为了探索机器学习中更高级的子领域,斯坦福大学有一套很好的课程。

计算机视觉

自然语言处理

强化学习

软件工具

  • Numpy:python 的数学和线性代数库。
  • Matplotlib:python 的绘图库。
  • SciKitLearn:python 中的机器学习工具包。
  • OpenCV : 计算机视觉工具包
  • Pytorch : 深度学习框架
  • Tensorflow : 深度学习框架

控制系统

控制系统有助于控制机器人的运动和功能。需要控制器,因为动态随时间而变化。当机器人在斜坡上向上移动,然后在斜坡上向下移动,或者首先在光滑的混凝土上移动,然后在铺有地毯的地板上移动。因此,“系统”的物理建模对于设计一个好的控制器至关重要。

给定控制器一个参考状态。控制器还具有传感器反馈,使用参考状态和传感器反馈控制器生成达到参考状态所需的控制信号。该控制信号被馈送到“系统”。系统动力学决定了系统对这个控制输入的行为方式。如果控制器是好的,希望“系统”能够达到想要的参考状态。

开始学习控制系统和理论 - Magnus Egerstedt(Georgia Tech)的移动机器人控制课程。

了解 PID 控制- MATLAB 播放列表详细解释了 PID 控制。

更多高级控制器,例如线性二次调节器(LQR)和模型预测控制(MPC)。

状态空间方程、极点放置和可控性等概念。在处理控制理论背后的数学时,这些变得至关重要。

机械设计

Fusion360 熟悉 3D 建模以建模能想到的任何东西的良好起点!

Dassault Systems 的 SOLIDWORKS 是一个主要的 CAD 平台,用于 3D 设计和基本模拟。它的功能比F360略多,非常适合制成品的设计和设计工程。


0 人点赞