• 第一章


    深蓝学院-运动规划-第9期

    第一章 搭建测试环境

    1.简介

    从零编写一个rviz显示地图的ros工程。为后续验证算法提供测试环境。这部分内容属于ros的基本操作,需要掌握。

    2.构建ros工程

    内容参考自《ROS理论与实践》:奥特学园

    1. 创建工作空间
    2. 创建功能包
    3. 编辑源文件
    4. 编辑配置文件
    5. 编译执行

    2.1 创建工作空间

    mkdir -p catkin_ws1/src
    cd catkin_ws1
    catkin_make
    

    2.2 创建功能包

    cd catkin_ws1/src
    catkin_create_pkg grid_path_search roscpp rospy std_msgs
    ...
    //实际上本工程已经给了功能包,不用自己创建
    

    2.3 编辑源文件

    需要生成node的源文件,里边必然有main函数,因为每个节点都是一个可执行程序。

    #include "ros/ros.h"
    //举例如
    int main(int argc, char *argv[])
    {
        //执行 ros 节点初始化
        ros::init(argc,argv,"hello");
        //创建 ros 节点句柄(非必须)
        ros::NodeHandle n;
        //控制台输出 hello world
        ROS_INFO("hello world!");
    
        return 0;
    }
    
    

    2.4 编辑配置文件

    编辑功能包下的CMakeLists.txt文件

    add_executable(步骤3的源文件名
      src/步骤3的源文件名.cpp
    )
    target_link_libraries(步骤3的源文件名
      ${catkin_LIBRARIES}
    )
    
    

    2.5 编译执行

    //编译
    cd catkin_ws1
    catkin_make
        
    //启动roscore
    roscore
        
    //执行节点
    cd catkin_ws1
    source ./devel/setup.bash
    rosrun 包名 节点名
    

    2.6 vscode中编译ros

    快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build,可以点击配置设置为默认,修改.vscode/tasks.json 文件。

    下次直接ctrl + shift + B即可在vscode中编译。

    {
    // 有关 tasks.json 格式的文档,请参见
        // https://go.microsoft.com/fwlink/?LinkId=733558
        "version": "2.0.0",
        "tasks": [
            {
                "label": "catkin_make:debug", //代表提示的描述性信息
                "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
                "command": "catkin_make",//这个是我们需要运行的命令
                "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
                "group": {"kind":"build","isDefault":true},
                "presentation": {
                    "reveal": "always"//可选always或者silence,代表是否输出信息
                },
                "problemMatcher": "$msCompile"
            }
        ]
    }
    
    

    2.7编写launch文件

    ROS是多进程(节点)的分布式框架,一个完整的ROS系统实现:

    可能包含多台主机;
    每台主机上又有多个工作空间(workspace);
    每个的工作空间中又包含多个功能包(package);
    每个功能包又包含多个节点(Node),不同的节点都有自己的节点名称;
    每个节点可能还会设置一个或多个话题(topic)

    使用 launch 文件,可以一次性启动多个 ROS 节点。

    在功能包内新建文件夹launch,新建xxx.launch文件。

    在功能包grid_path_searcher中,包含了两个节点(有几个add_executable就有几个节点):

    • demo_node
    • random_complex
    2.7.1 launch常用语法

    详细讲解参考赵虚左老师的讲义

    graph LR A("lanuch") B("node") C("include") D("remap") E("param") F("rosparam") G("group") H("arg") A --- B A --- C A --- D A --- E A --- F A --- G A --- H B -- 节点所属的包 --> pkg=包名 B -- 节点类型及与之相同名称的可执行文件 -->type=nodeType B -- 在ROS网络拓扑中节点的名称 --> name=nodeName B -- 将参数传递给节点 --> args=xx B -- 日志发送目标 --> M("output=log|screen") D --- from原始话题to目标名称 E --- param("<param>标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在<node>标签中时,相当于私有命名空间") H --- arg("<arg>标签是用于动态传参,类似于函数的参数,可以增强launch文件的灵活性")
    2.7.2 launch实例
    graph LR subgraph 功能包 pkg1(grid_path_searcher) pkg2(waypoint_generator) plugin(rviz_plugins) end subgraph node node1(demo_node) node2(random_complex) node3(waypoint_generator) end pkg1 --> node1 pkg1 --> node2 pkg2 --> node3 plugin --> librviz_plugins.so
    <launch>
    
    <arg name="map_size_x" default="20.0"/>
    <arg name="map_size_y" default="20.0"/>
    <arg name="map_size_z" default=" 10.0"/>
    
    <arg name="start_x" default=" 0.0"/>
    <arg name="start_y" default=" 0.0"/>
    <arg name="start_z" default=" 1.0"/>
      <!--启动grid_path_search包的demo_node节点-->
      <node pkg="grid_path_searcher" type="demo_node" name="demo_node" output="screen" required = "true">
          <remap from="~waypoints"       to="/waypoint_generator/waypoints"/>
          <remap from="~map"             to="/random_complex/global_map"/> 
    
          <param name="map/margin"       value="0.0" />
          <param name="map/resolution"   value="0.2" />
          <param name="map/x_size"       value="$(arg map_size_x)"/>
          <param name="map/y_size"       value="$(arg map_size_y)"/>
          <param name="map/z_size"       value="$(arg map_size_z)"/>
    
          <param name="planning/start_x" value="$(arg start_x)"/>
          <param name="planning/start_y" value="$(arg start_y)"/>
          <param name="planning/start_z" value="$(arg start_z)"/>
      </node>
      <!--启动grid_path_search包的random_complex节点-->
      <node pkg ="grid_path_searcher" name ="random_complex" type ="random_complex" output = "screen">    
        
          <param name="init_state_x"   value="$(arg start_x)"/>
          <param name="init_state_y"   value="$(arg start_y)"/>
    
          <param name="map/x_size"     value="$(arg map_size_x)" />
          <param name="map/y_size"     value="$(arg map_size_y)" />
          <param name="map/z_size"     value="$(arg map_size_z)" />
    
          <param name="map/circle_num" value="40"/>        
          <param name="map/obs_num"    value="300"/>        
          <param name="map/resolution" value="0.1"/>        
    
          <param name="ObstacleShape/lower_rad" value="0.1"/>
          <param name="ObstacleShape/upper_rad" value="0.7"/>
          <param name="ObstacleShape/lower_hei" value="1.0"/>
          <param name="ObstacleShape/upper_hei" value="3.0"/>
    
          <param name="CircleShape/lower_circle_rad"   value="0.6"/>        
          <param name="CircleShape/upper_circle_rad"   value="2.0"/>        
    
          <param name="sensing/rate"   value="0.5"/>        
      </node>
      <!--启动waypoint_generator包的waypoint_generator节点-->
      <node pkg="waypoint_generator" name="waypoint_generator" type="waypoint_generator" output="screen">
          <remap from="~goal" to="/goal"/>
          <param name="waypoint_type" value="manual-lonely-waypoint"/>    
      </node>
    
    </launch>
    
  • 相关阅读:
    ASP.NET2.0 Provider模型
    平时可以上一上的SQL Server的网站
    有关SQL server connection KeepAlive 的FAQ(1)
    有关SQL server connection Keep Alive 的FAQ(2)
    使用C#的is和as操作符来转型
    BlogEngine学习系列
    复习asp.net form验证
    C#学习之动态化dynamic
    Altium Designer(Protel)网络连接方式Port和Net Label详解
    Altium Designer生成Gerber文件和钻孔文件的一般步骤
  • 原文地址:https://www.cnblogs.com/gaowensheng/p/16002266.html
Copyright © 2020-2023  润新知