# ros

# ROS 发展

# ros 核心概念

# 节点与节点管理器

  • 节点 (node)—— 执行单元

  • 节点管理器 (ROS Master)—— 控制中心

    wode

# 话题通讯

  • 话题 (Topic)—— 异步通讯机制

  • 消息 (Message)—— 话题数据

    wode

# 服务通讯

  • 服务 (Service)—— 同步通讯机制

    wode

# 参数

  • 参数 (Parameter)—— 全局共享字典

    wode

# 文件系统

  • 功能包 (Package)

  • 功能包清单 (Package manifest)

  • 元功能包 (Meta Packages)

    wode

# ROS 命令行工具使用

# 常用命令

# 运行小海龟

  • roscore
    1. rosrun turtlesim 双击 tab
    2. rosrun turtlesim turtlesim_node
  • rosrun turtlesim turtle_teleop_key

# 命令行控制小海龟

  • rqt_graph

  • rosnode

  • rosnode info /turtlesim

  • rostopic

  • rostopic pub /turtle1/cmd_vel geometry_msgs/Twist (双击 tab)

    海龟绕 z 轴转

  • rosmsg show geometry_msgs/Twist

  • rosservice

  • rosservice call /spawn (双击 tab,新加一只海龟)

  • rosbag record -a -O cmd_record (保存运行数据)

  • rosbag play cmd_record.bag (按上次数据运行)

    wode

    wode

    wode

    wode

    wode

    wode

    wode

# 创建工作空间与功能包

# 功能空间

  • src (代码空间)

  • build (编译空间)

  • devel (开发空间)

  • install (安装空间)

    wode

# 创建工作空间

# 创建工作空间

  • mkdir -p ~/catkin_ws/src
  • cd ~/catkin_ws/src
  • catkin_init_workspace

# 编译工作空间

  • cd ~/catkin_ws/
  • catkin_make

# 设置环境变量

  • source devel/setup.bash

# 检查环境变量

  • echo $ROS_PACKAGE_PATH

# 创建功能包

# 创建功能包

  • cd ~/catkin_ws/src
  • catkin_create_pkg test_pkg std_msgs roscpp rospy
  • wode

# 编译功能包

  • cd ~catkin_ws
  • catkin_make
  • source ~/catkin_ws/devel/setup.bash

# 发布者 Publisher 的编程实现

  • 创建功能包

  • 在功能包的 src 中创建文档,输入代码 (touch 文档名)

  • 配置发布者代码编译规则 (插入到 CM。。。.txt 中 Install 前)

    add_executable(velocity

    _publisher src/velocity_publisher.cpp)

    target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

  • 回到工作空间根目录进行 ——catkin_make

  • 设置环境变量 ——source delel/setup.bash (ctrl+h, 找到隐藏文件,固定)

  • 重启终端,启动 ros,海龟,第三个终端 ——rosrun 功能包名

# 订阅者 Subscriber 的编程实现

  • 在功能包的 src 中创建文档,输入代码

  • 配置发布者代码编译规则 (插入到 CM。。。.txt 中 Install 前)

    add_executable(pose_subscriber src/pose_subscriber.cpp)
    target_link_libraries(pose_subscriber ${catkin_LIBRARIES})

  • 回到工作空间根目录进行 ——catkin_make

  • 设置环境变量 ——source delel/setup.bash (发布者过程以固定,可忽略)

  • 重启终端,启动 ros,海龟,第三个终端 ——rosrun 功能包名 文档名

# 话题消息的定义与使用

# 自定义话题消息

# 定义 msg 文件

  • touch Person.msg

  • 数据接口的定义

    string name
    uint8 sex
    uint8 age

    uint8 unknown = 0
    uint8 male = 1
    uint8 female = 2

# 在 package.xml 中添加功能包依赖

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

# 在 CMakeLists.txt 添加编译选项

  • find_package( …… message_generation)

  • add_message_files(FILES Person.msg)
    generate_messages(DEPENDENCIES std_msgs)

  • catkin_package(…… message_runtime)

# 编译生成相关语言文件

# 配置代码编译规则

*/add_executable(person_publisher src/person_publisher.cpp)
*/target_link_libraries(person_publisher ${catkin_LIBRARIES})
*/add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)

*/add_executable(person_subscriber src/person_subscriber.cpp)
*/target_link_libraries(person_subscriber ${catkin_LIBRARIES})
*/add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

wode

# 客户端 Client 的编程实现

# 创建功能包

catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

# 创建客户端代码

# 配置客户端代码编译规则 (c++)

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

# 运行

wode

# 服务端 Service 的编程实现

# 创建代码并配置编译规则

add_executable(turtle_command_server src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server ${catkin_LIBRARIES})

# 编译并运行服务器

wode

wode

# 服务数据的定义与使用

wode

# 自定义服务数据

# 定义 srv 文件

# 在 package.xml 中添加功能包依赖

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

# 在 CMakeLists.txt 添加编译选项

  • find_package(...... message_generation)

  • add_service_files(FILES Person.srv)
    generates_message(DEPENDENCIES std_msgs)

  • catkin_package(...... message_runtime)

# 编译

wode

# 创建服务端代码

# 创建客户端代码

# 配置编译规则

add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)

add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)

wode

wode

# 参数的使用与编程方法

# 参数模型

wode

# 创建功能包

catkin_create_pkg learning_parameter roscpp rospy std_srvs

# 参数命令行使用

# rosparam

  • 列出当前多有参数

    $ rosparam list

  • 显示某个参数值

    $ rosparam get param_key

  • 设置某个参数值

    $ rosparam set param_key param_value

  • 保存参数到文件

    $ rosparam dumo file_name

  • 从文件读取参数

    $ rosparam delete param_key

    wode

    wode

# 编程方法

# 配置代码编译规则

add_executable(parameter_config src/parameter_config.cpp)

target_link_libraries(parameter_config ${catkin_LISRARAIES})

wode

# 编译并运行

更新于 阅读次数