科研向(仿真验证) ROS 学习笔记一:ROS 概述与环境搭建

ROS:Robot Operating System 【适用于机器人的开源元操作系统】
ROS = Plumbing + Tools + Capabilities + Ecosystem

  1. Plumbing: 通讯机制(实现ROS不同节点之间的交互);
  2. Tools :工具软件包(ROS中的开发和调试工具),提供仿真功能;
  3. Capabilities :机器人高层技能(ROS中某些功能的集合,比如:导航),主要是下载功能复用调参;
  4. Ecosystem:机器人生态系统(跨地域、跨软件与硬件的ROS联盟)。

特点:代码复用、分布式(进程 Nodes 分布式框架)、松耦合(只规定传感器接口规则)、精简、语言独立性(C, Python ...)、易于测试(内置测试框架rostest)、大型应用、丰富的组件化工具包、免费且开源。

科研向(仿真验证) ROS 学习笔记一:ROS 概述与环境搭建_第1张图片


ROS 安装

1. 安装ROS所需要的操作系统环境 Linux:Ubuntu20.04

ITEM REFERENCE
VMware Workstation Pro v16 https://www.ruanhuicn.com/soft/vmware-workstation-pro.html
Ubuntu20.04 iso http://mirrors.aliyun.com/ubuntu-releases/20.04/

2. 安装对应版本的 ROS:Noetic

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full  # 如果网卡则重复执行下 update 和 install
# 如果需要卸载: sudo apt remove ros-noetic-* 
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
sudo rosdep init
rosdep update

# 如果网络无法成功运行上述代码:
# cd /usr/lib/python3/dist-packages/ 
# find . -type f | xargs grep "raw.githubusercontent"
# 修改 raw.githubusercontent.com/ros/rosdistro/master -> gitee.com/zhao-xuzuo/rosdistro/raw/master
# sudo gedit ./rosdistro/__init__.py
# sudo gedit ./rosdep2/gbpdistro_support.py
# sudo edit ./rosdep2/sources_list.py
# sudo edit ./rosdep2/rep3.py

3.安装工具

安装终端:sudo apt install terminator

Ctrl+Shift+O  //水平分割终端   Ctrl+Shift+P  //移动到前一个终端
Ctrl+Shift+E  //垂直分割终端   Ctrl+Shift+N  //移动到下一个终端

安装 vsc

wget https://code.visualstudio.com/docs?start=true
sudo dpkg -i xxxx.deb  # 卸载 sudo dpkg --purge code
# 为 VSC 安装插件: Python, ROS, CMake Tools

4. 测试

a. 首先启动三个命令行(ctrl + alt + T)
b. 命令行1键入:roscore
c. 命令行2键入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
d. 命令行3键入:rosrun turtlesim turtle_teleop_key(上下左右控制2中乌龟的运动)

另外,使用ROS需要 C++ 或者Python的编程经验,可以在网上找的很多学习资料!

5. 开始自己的第一次尝试:Hello World

# Create workspace: tutu_ws
mkdir -p tutu_ws/src; cd work_space; catkin_make

# Create package: helloworld
cd src; catkin_create_pkg helloworld roscpp rospy std_msgs message_generation

# Edit .py source file: hello_world.py
mkdir scripts; > hello_world.py; chmod +x hello_world.py

# Edite configuration file: CamkeList.txt
catkin_install_python(PROGRAMS scripts/自定义文件名(hello_world).py
	DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

# Build 
# 1.command line method:
cd tutu_ws; catkin_make
# 2.vsc method: ctrl + shift + B
cd tutu_ws; code .

# Run
roscore; cd tutu_ws; source ./devel/setup.bash; rosrun helloworld hello_world.py

hello_world.py 的具体内容如下所示:

#! /usr/bin/env python
import rospy
# sys.path.insert(0,path + "/src/pkg/scripts")  # 如果需要导入自己的包
# import your_py

if __name__ == "__main__":
    rospy.init_node("Hello")
    '''
    在ROS msater中注册节点

    @param name: 节点名称(唯一),节点名称中不能使用命名空间(不能包含 '/')
    @type  name: str

	@param argv: 封装节点调用时传递的参数,存到参数服务器
	@type  argv: None
	
    @param anonymous: 取值为 true 时,为节点名称后缀随机编号可以解决重名
    @type  anonymous: bool
    '''
    rospy.loginfo("Hello World!!!!")  # 打印

也使用 launch 来实现 Run 步骤: 【可以摆脱需要多个 terminal 的问题】

cd tutu_ws; mkdir src/helloworld/launch; > new.launch
roslaunch helloworld new.launch

new.launch 的具体内容如下所示:


    

For C++:

  • Modify Package Configuration File (package.xml)
    <build_depend>message_generation</build_depend>
    <build_export_depend>message_runtime</build_export_depend>
    
    <exec_depend>message_runtime</exec_depend>
    <exec_depend>roscpp</exec_depend>
    
    <depend>std_msgs</depend>
    
  • Modify Configuration File (CMakeLists.txt)
    find_package(roscpp, ...)
    add_message_files(xxx.msg, ...)  	
    add_service_files(xxx.srv, ...)    
    add_action_files(xxx.action, ...)		
    
    generate_messages(std_msgs, ...)
    
    add_executable(/.../xxx.cpp)
    add_dependencies(xxx ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
    target_link_libraries(xxx ${catkin_LIBRARIES})
    

ROS架构介绍

1. 文件系统

WorkSpace --- 自定义的工作空间

   |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
   |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
   |--- src: 源码
       |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
           |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
           |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
           |-- scripts 存储 python 文件
           |-- src 存储 C++ 源文件
           |-- include 头文件
           |-- msg 消息通信格式文件
           |-- srv 服务通信格式文件
           |-- action 动作格式文件(goal definition, result definition, feedback definition)
           |-- launch 可一次性运行多个节点 
           |-- config 配置信息
       |-- CMakeLists.txt: 编译的基本配置

2. 文件系统命令

  1. catkin_create_pkg pkg_name roscpp rospy std_msgs;查 rospack list, rospack find;改 rosed pkg_name file_name
  2. 执行: roscore 是先决条件;rosrun pkg_name exefile_nameroslaunch pkg_name exefile_name
  3. 其他: roscd, rosls, apt search pkg

3. ROS 计算图 rqt_graph

启动:rosrun rqt_graph rqt_graph


参考资料如下: ROS理论与实践

你可能感兴趣的:(ROS学习笔记,python)