精华内容
下载资源
问答
  • 机器人操作系统ROS入门学习资料汇总,含教程以及优质网站汇总
  • 基于Tonan公司的Julab Pro 移动机器人
  • ROS机器人编程

    2018-04-10 20:35:25
    ROS机器人编程,“ROS机器人编程,由TurtleBot3开发人员编写”
  • 掌握ROS机器人编程

    2018-05-06 13:35:31
    掌握ROS机器人编程是英文版的Master ROS for Robotics Programming
  • ROS 机器人编程

    2018-12-19 19:28:04
    ROS机器人从入门到精通,非常好用。从仿真到如何寻迹、。
  • ROS机器人编程中文版

    2019-04-11 17:41:24
    ROS机器人编程中文版
  • ROS机器人高效编程原书第3版,本书纸质版在淘宝和京东都有销售,是一本不错的入门级书籍。
  • ROS机器人高效编程(原书第3版)包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和...
  • ROS 机器人高效编程,高清。阿尼尔.马哈塔尼
  • 本章主要介绍了ROS的基本编程实现内容,包括编程规则、发布者&订阅者、服务服务器&客户端、动作服务器&客户端。本文主要介绍编程规则、发布者&订阅者两部分内容。

    第7章 ROS编程基础
    本章主要介绍了ROS的基本编程实现内容,包括编程规则、发布者&订阅者、服务服务器&客户端、动作服务器&客户端。
    同样的,由于本章节内容较多,博客学习记录分为三节。
    本文主要介绍编程规则、发布者&订阅者两部分内容。


    《ROS机器人编程》源代码:
    https://github.com/ROBOTIS-GIT/ros_tutorials/tree/master/ros_tutorials_topic

    古月居源代码:
    https://github.com/huchunxu/ros_21_tutorials/tree/master/learning_topic


    7.1 编程基本规则

    1、标准单位SI
    在这里插入图片描述

    2、坐标系

    机器人的旋转方向是右手定则,用右手卷住的方向是正(+)方向。
    在这里插入图片描述

    3、命名规则

    在这里插入图片描述

    7.2 发布者节点和订阅者节点的创建和运行

    《ROS机器人编程》

    1. 创建功能包
    依赖选项 message_generation、std_msgs、roscpp

    $ cd ~/catkin_ws/src
    $ catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp
    

    2. 修改功能包配置文件
    package.xml是一个包含功能包信息的XML文件,包含用于描述功能包名称、作者、许可证和依赖包的信息。

    $ gedit package.xml
    

    3. 修改构建配置文件
    ROS的构建系统catkin基本上使用CMake,在功能包目录中的CMakeLists.txt文件中描述了构建环境。该文件设置可执行文件的创建、依赖包优先构建、链接创建等。

    $ gedit CMakeLists.txt
    

    4. 创建消息文件
    在构建时要包含消息MsgTutorial.msg,该消息将在此节点中被使用。

    add_message_files(FILES MsgTutorial.msg)
    

    创建MsgTutorial.msg:

    $ roscd ros_tutorials_topic		→ 移动到功能包目录
    $ mkdir msg						→ 功能包中创建新的msg消息目录
    $ cd msg						→ 转到创建的msg目录
    $ gedit MsgTutorial.msg			→ 创建新的MsgTutorial.msg文件并修改内容
    

    5. 创建发布者节点和订阅者节点

    CMakeLists.txt文件中,给了生成以下可执行文件的选项。
    即,通过构建 .cpp 源文件来创建可执行文件。

    add_executable(topic_publisher src/topic_publisher.cpp)
    add_executable(topic_subscriber src/topic_subscriber.cpp)
    
    $ roscd ros_tutorials_topic/src		→ 移至src目录,该目录是功能包的源代码目录
    $ gedit topic_publisher.cpp			→ 新建源文件并修改内容
    
    $ roscd ros_tutorials_topic/src		→ 移动到src目录,该目录是功能包的源代码目录 
    $ gedit topic_subscriber.cpp		→ 创建和修改新的源代码文件
    

    7. 构建(build)节点

    catkin构建:

    $ cd ~/catkin_ws&&catkin_make
    

    功能包的源代码位于 “~/catkin_ws/src/ros_tutorials_topic/src"
    消息文件位于 “~/catkin_ws/src/ros_tutorials_topic/msg”

    “/build”目录中保存catkin构建用到的配置内容
    “/devel/lib/ros_tutorials_topic’”目录中保存可执行文件。

    8. 运行发布者和订阅者

    运行的发布者节点,通过 rostopic 检查ros_tutorial_msg话题消息内容。

    $ roscore
    $ rosrun ros_tutorials_topictopic_publisher
    $ rostopic echo /ros_tutorial_msg
    

    在这里插入图片描述
    运行订阅者节点,接收发布者发布的ros_tutorial_msg话题的消息,并在屏幕上显示该值。

    $ rosrun ros_tutorials_topic topic_subscriber
    

    9. 检查运行中的节点的通信状态

    使用rqt_graph或rqt,查看运行中的节点的通信状态。

    在这里插入图片描述



    古月居《ROS入门21讲》

    古月居21讲中,对于发布者和订阅者的讲述构建的是小海龟运动实例。

    1. 实现发布者节点的基本代码内容
    (.cpp or .py,此处以.cpp为例)

    在这里插入图片描述

    • 初始化ROS节点
    // ROS节点初始化
    ros::init(argc, argv, "velocity_publisher");
    
    • 向ROS Master注册节点信息,包括发布打话题名和话题中的消息类型
    // 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
    ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
    
    • 创建消息数据
    // 初始化geometry_msgs::Twist类型的消息
    geometry_msgs::Twist vel_msg;
    vel_msg.linear.x = 0.5;
    vel_msg.angular.z = 0.2;
    
    • 按照一定频率循环发送消息
    // 发布消息
    turtle_vel_pub.publish(vel_msg);
    ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
    vel_msg.linear.x, vel_msg.angular.z);
    
    // 按照循环频率延时
    loop_rate.sleep();
    

    在这里插入图片描述


    2. 实现订阅者节点的基本代码内容

    在这里插入图片描述

    • 初始化ROS节点
    // 初始化ROS节点
    ros::init(argc, argv, "pose_subscriber");
    
    • 订阅需要的话题
    // 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
    
    • 循环等待话题消息,接收到消息后进入回调函数
      (相当于一个中断,回调函数的处理时间不能太长)
    // 循环等待回调函数,在回调函数中完成消息处理
    ros::spin();
    
    // 接收到订阅的消息后,会进入消息回调函数
    void poseCallback(const turtlesim::Pose::ConstPtr& msg)
    {
        // 将接收到的消息打印出来
        ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
    }
    
    

    在这里插入图片描述
    此外,运行.py无需进行编译,但需要确认.py文件是可执行文件。

    $ rosrun learning_topic pose_subscriber.py
    

    自定义消息类型

    在这里插入图片描述

    <build_depend> 编译依赖,message_generation动态产生功能包
    <exec_depend> 执行依赖,message_runtime运行时的依赖项

    find_package项是进行构建所需的组件包,让用户创建依赖包的选项。

    add_message_files是添加消息文件的选项。
    generate_messages是设置依赖的消息的选项。此示例是将DEPENDENCIES选项设置为使用std_msgs消息包。
    catkin_package是catkin 构建选项:

    • INCLUDE_DIRS表示将使用INCLUDE_DIRS后面的内部目录include的头文件。
    • LIBRARIES表示将使用随后而来的功能包的库。
    • CATKIN_DEPENDS后面指定如roscpp或std_msgs等依赖包。
    • DEPENDS是一个描述系统依赖包的设置。
    展开全文
  • 2年前,开设过ROS1机器人高效编程公选课,效果不好; 自己不甘心,今年开设ROS2机器人高效编程公选课,效果更差。 个人水平能力有限,由于网课,到课率也非常低,通常低于40%(基于云班课签到和钉钉直播观看数据)...

    简言之,公选课尝试以失败告终

    2年前,开设过ROS1机器人高效编程公选课,效果不好;

    自己不甘心,今年开设ROS2机器人高效编程公选课,效果更差。

    个人水平能力有限,由于网课,到课率也非常低,通常低于40%(基于云班课签到和钉钉直播观看数据),成绩占比如下:

    课程资源全部在CSDN,实验楼,云班课,古月居免费公开发布。

    主要有:

    云班课参与度数据如下:

    制作镜像参与仅15人,最后仅27人提交课程报告,大部分报告与所提供镜像毫无关系。

    云班课加权得分算出平时成绩到60分的,只有19人,在疯狂灌水提分下,让能及格的学生尽量通过。

    感谢一部分学生的大力支持,同时课程原定大纲由于反馈过于困难,并未讲完,所讲内容偏基础,一些核心复杂功能包并未讲。

    总之,此课有非常多的遗憾,也深刻意识到课程由于个人水平无法给学生讲授好ROS2,故决定永久停开。

    再次向各位学生致以深深地歉意。对不起,请多包涵。


     

    展开全文
  • ROS机器人编程中英双语无损压缩版 ROS机器人编程中英双语无损压缩版 ROS机器人编程中英双语无损压缩版
  • 7.2 发布者节点和订阅者节点的创建和运行 1.创建功能包 $ cd ~/catkin_ws/src $ catkin_create_pkg ros_...创建ros _ tutorials _ topic功能包,依赖于message_generation(创建新消息的功能包,std_msgs(ROS...

    7.2 发布者节点和订阅者节点的创建和运行

    1.创建功能包

    $ cd ~/catkin_ws/src
    $ catkin_create_pkg ros_tutorials_topic message_generation std_msgs roscpp
    

    创建ros _ tutorials _ topic功能包,依赖于message_generation(创建新消息的功能包,std_msgs(ROS标准消息功能包)和roscpp(在ROS中使用C/C ++的客户端程序库),且必须在创建功能包之前安装。
    创建功能包时,将在~/catkin_ws/src目录中创建ros_tutorials_topic功能包目录。

    $ cd ros_tutorials_topic
    $ ls
    include 			 → 头文件目录
    src 	             → 源代码目录
    CMakeLists.txt 	 → 构建配置文件			
    package.xml 		 → 功能包配置文件
    

    2.修改配置文件

    ROS的必备配置文件package.xml是一个包含功能包信息的XML文件,其中包含用于描述功能包名称、作者、许可证和依赖包的信息。利用编辑器(gedit、vim、emacs等)打开文件,并修改它以匹配当前节点。

    $ gedit package.xml
    

    ROS的构建系统catkin基本上使用CMake,它在功能包目录中的CMakeLists.txt文件中描述了构建环境。该文件设置可执行文件的创建、依赖包优先构建、链接创建等。

    $ gedit CMakeLists.txt
    

    3. 创建消息文件

    在上述的CMakeLists.txt文中添加了如下选项。

    add_message_files(FILES MsgTutorial.msg)
    

    在构建时要包含消息MsgTutorial.msg,该消息将在此节点中被使用。按以下顺序创建它:

    $ roscd ros_tutorials_topic 		 → 移动到功能包目录
    $ mkdir msg 					→ 功能包中创建新的 msg 消息目录
    $ cd msg 					 → 转到创建的 msg 目录
    $ gedit MsgTutorial.msg 		→ 创建新的 MsgTutorial . msg 文件并修改内容
    

    4. 创建发布者节点

    CMakeLists.txt中,给了生成以下可执行文件的选项。

    add_executable (topic_publisher src/topic_publisher.cpp )
    
    $ roscd ros_tutorials_topic/src 	→ 移至 src 目录,该目录是功能包的源代码目录
    $ gedit topic_publisher.cpp 		→ 新建源文件并修改内容
    

    5. 创建订阅者节点

    CMakeLists.txt中添加以下选项来生成可执行文件。

    add_executable(topic_subscriber src/topic_subscriber.cpp)
    

    通过构建topic_subscriber.cpp文件来创建topic_subscriber可执行文件。

    $ roscd ros_tutorials_topic/src 		→ 移动到 src 目录,该目录是功能包的源代码目录
    $ gedit topic_subscriber cpp 	→ 创建和修改新的源代码文件		
    

    6. 构建(build)节点

    $ cd ~/catkin_ws 		→ 移动到 catkin 目录
    $ catkin_make 		→ 执行 catkin 构建
    

    使用以上命令在ros_tutorials_topic功能包中构建消息文件、发布者节点和订阅者节点。
    ros_tutorials_topic功能包的源代码位于“~/catkin_ws/src/ros_tutorials_topic/src”
    ros_tutorials_topic功能包中的消息文件位于“/catkin_ws/src/ros_tutorials_topic/msg”
    基于此的构建:
    在“~/catkin_ws”的“/build”和“/devel”目录中生成文件。
    “/build”目录中保存catkin构建用到的配置内容
    而“/devel/lib/ros_tutorials_topic’”目录中保存可执行文件。
    另外,“/devel/include/ros_tutorials_topic”目录存储着从消息文件自动生成的消息头文件。

    7.运行发布者

    $ roscore
    $ rosrun ros_tutorials_topic topic_publisher
    
    $ rostopic list
    /ros_tutorial_msg
    /rosout
    /rosout_agg
    
    $ rostopic echo/ros_tutorial_msg		/检查ros_tutorial_msg话题消息                                                                            
    

    8. 运行订阅者

    $ rosrun ros_tutorials_topic topic_subscriber
    

    9. 检查运行中的节点的通信状态

    $ rqt_graph 或 $ rqt
    

    在这里插入图片描述发布者节点(topic_publisher)正在传输话题(ros_tutorial_msg),并且可以确认它正在接收订阅者节点(topic_subscriber)。

    7.3. 创建和运行服务服务器与客户端节点

    服务由服务服务器(service server)和服务客户端(service client)组成,其中服务服务器仅在收到请求(request)时才会响应(response),而服务客户端则会发送请求并接收响应。与话题不同,服务是一次性消息通信。因此,当服务的请求和响应完成时,两个节点的连接会被断开。
    本节旨在创建一个简单的服务文件,并创建和运行一个服务服务器(server)节点和一个服务客户端(client)节点。

    1.创建功能包

    $ cd ~/catkin_ws/src
    $ catkin_create_pkg ros_tutorials_service message_generation std_msgs roscpp
    
    $ cd ros_tutorials_service
    $ ls
    include 			 → 头文件目录
    src 	             → 源代码目录
    CMakeLists.txt 	     → 构建配置文件			
    package.xml 		 → 功能包配置文件
    

    2.修改配置文件

    $ gedit package.xml
    
    $ gedit CMakeLists.txt
    

    3. 创建服务文件

    在上述的CMakeLists.txt文中添加了如下选项。

    add_service_files(FILES SrvTutorial.srv)
    

    按以下顺序创建SrvTutorial.srv:

    $ roscd ros_tutorials_service 		 → 移动到功能包目录
    $ mkdir srv 						 → 功能包中创建新的srv服务目录
    $ cd srv							 → 转到创建的srv目录
    $ gedit SrvTutorial.srv 			 → 创建新的SrvTutorial.srv文件并修改内容
    
    int64 a
    int64 b
    ---
    int64 result
    

    4. 创建服务服务器节点

    CMakeLists.txt中,给了生成以下可执行文件的选项。

    add_executable (service_server src/service_server.cpp)
    
    $ roscd ros_tutorials_service/src 	→ 移至 src 目录,该目录是功能包的源代码目录
    $ gedit service_server.cpp 		→ 新建源文件并修改内容
    

    5. 创建服务客户端节点

    CMakeLists.txt中添加以下选项来生成可执行文件。

    add_executable(service_client src/service_client.cpp)
    
    $ roscd ros_tutorials_service/src 		→ 移动到 src 目录,该目录是功能包的源代码目录
    $ gedit service_client.cpp 				→ 创建和修改新的源代码文件		
    

    6. 构建(build)节点

    $ cd ~/catkin_ws 		→ 移动到 catkin 目录
    $ catkin_make 		→ 执行 catkin 构建
    

    7.运行服务服务器

    $ roscore
    $ rosrun ros_tutorials_service service_server
    

    8. 运行服务客户端

    $ rosrun ros_tutorials_service service_client 2 3
    

    9.rosservice call命令的用法

    在下面的命令中执行rosservice call命令之后,写入相应的服务名称,例如/ros_tutorial_srv,然后写入服务请求所需的参数即可。

    $ rosservice call / ros _ tutorial _ srv 10 2
    result : 12
    

    10. GUI工具Service Caller的用法

    最后,介绍使用rqt的ServiceCaller的方法,它使用一个GUI形式的界面。首先,运行ROS的GUI工具rqt。

    $ rqt
    

    然后从rqt程序的菜单中选择[插件[Plugins]→[Service]→[Service Caller],然后出现如下屏幕。
    在这里插入图片描述

    7.4. 创建和运行动作服务器和客户端节点

    动作与话题和服务不同,在异步、双向,以及请求和响应之间需要很长的时间的情况,以及需要中途结果值等需要更复杂的编程的情况中显
    的格外有用。

    1.创建功能包

    $ cd ~/catkin_ws/src
    $ catkin_create_pkg ros_tutorials_action message_generation actionlib_msgs actionlib roscpp
    

    2.修改配置文件

    $ gedit package.xml
    
    $ gedit CMakeLists.txt
    

    3. 创建动作文件

    在上述的CMakeLists.txt文中添加了如下选项。

    add_action_files(FILES Fibonacci.action)
    

    按以下顺序创建Fibonacci.action:

    $ roscd ros_tutorials_action 	 → 移动到功能包目录
    $ mkdir action					 → 功能包中创建新的srv服务目录
    $ cd action						 → 转到创建的srv目录
    $ gedit Fibonacci.action 		 → 创建新的Fibonacci.action文件并修改内容
    

    在动作文件中,三个连字符(—)用作分隔符,第一个是goal消息,第二个是result消息,第三个是feedback消息。goal消息和result消息之间的关系与上述srv文件相同,但主要区别在于feedback消息用于指定进程执行过程中的中间值传输。

    
    # goal definition
    int32 order
    ---
    # result definition
    int32 [] sequence
    ---
    # feedback
    int32[] sequence
    

    除了可以在动作文件中找到的目标(goal)、结果(result)和反馈(feedback)之外,动作基本上还使用两个额外的消息:取消(cancel)和状态(status)。取消(cancel)消息使用actionlib_msgs/GoalID,它在动作运行时可以取消动作客户端和单独节点上的动作的执行。状态(status)消息可以根据状态转换 (如PENDING、ACTIVE、PREEMPTED和SUCCEEDED )检查当前动作的状态。

    4. 创建动作服务器节点

    CMakeLists.txt中,给了生成以下可执行文件的选项。

    add_executable (action_server src/action_server.cpp)
    
    $ roscd ros_tutorials_action/src 	→ 移至 src 目录,该目录是功能包的源代码目录
    $ gedit action_server.cpp 			→ 新建源文件并修改内容
    

    5. 创建动作客户端节点

    CMakeLists.txt中添加以下选项来生成可执行文件。

    add_executable(action_client src/action_client.cpp)
    
    $ roscd ros_tutorials_action/src 		→ 移动到 src 目录,该目录是功能包的源代码目录
    $ gedit action_client.cpp 				→ 创建和修改新的源代码文件		
    

    6. 构建(build)节点

    $ cd ~/catkin_ws 	→ 移动到 catkin 目录
    $ catkin_make 		→ 执行 catkin 构建
    

    7.运行动作服务器

    $ roscore
    $ rosrun ros_tutorials_action action_server
    

    可以通过rqt_graph和rostopic list命令来查看当前动作消息的使用情况。
    如果想了解更多有关每条消息的信息,请将-v选项添加到rostopic list中。这将单独显示发布和订阅的话题。
    为了查看可视化信息,请使用以下命令。

    $ rqt _ graph
    

    8. 运行动作客户端

    $ rosrun ros_tutorials_action action_client 
    

    如果想详细了解中途值或结果值,

    rostopic echo /ros_tutorial_action/feedback
    

    7.5. 参数的用法

    7.6. roslaunch的用法

    roslaunch可以运行多个节点。
    除此之外,它还是一种在运行节点时可以附带如下各种选项的ROS命令: 修改参数或节点的名称,设置节点的命名空间,设置ROS_ROOT及ROS_PACKAGE_PATH,以及环境变量修改等选项的ROS命令等。
    roslaunch使用“*.launch”文件来设置可执行节点,它基于XML,并提供各个标签的选项。

    roslaunch [功能包名称] [roslaunch文件]
    

    1. roslaunch的应用

    $ roscd ros_tutorials_topic
    $ mkdir launch
    $ cd launch
    $ gedit union.launch
    

    如下编辑union.launch文件的内容。

    < launch >
    < node pkg = "ros _ tutorials _ topic" type = "topic _ publisher" name = "topic _ publisher1" />
    < node pkg = "ros _ tutorials _ topic" type = "topic _ subscriber" name = "topic _ subscriber1" />
    < node pkg = "ros _ tutorials _ topic" type = "topic _ publisher" name = "topic _ publisher2" />
    < node pkg = "ros _ tutorials _ topic" type = "topic _ subscriber" name = "topic _ subscriber2" />
    </launch>
    

    在标签中,描述了使用roslaunch命令运行节点所需的标签。描述了roslaunch运行的节点。

    pkg 功能包的名称
    type 实际运行的节点的名称(节点名)
    name 与上述type对应的节点被运行时,起的名称(运行名)。一般情况下使用与type相同的名称,但可以根据需要,在运行时更改名称。

    添加–screen选项,终端上运行的所有节点的输出将显示在终端屏幕上。

    $ roslaunch ros_tutorials_topic union.launch --screen
    

    2. Launch标签

    launch 指roslaunch语句的开始和结束。
    node 这是对于节点运行的标签。您可以更改功能包、节点名称和执行名称。
    machine 可以设置运行该节点的PC的名称、address、ros-root和ros-package-path。
    include 您可以加载属于同一个功能包或不同的功能包的另一个launch,并将其作为一个launch文件来运行。
    remap 可以更改节点名称、话题名称等等,在节点中用到的ROS变量的名称。
    env 设置环境变量,如路径和IP(很少使用)。
    param 设置参数名称、类型、值等
    rosparam 可以像rosparam命令一样,查看和修改load、dump和delete等参数信息。
    group> 用于分组正在运行的节点。
    test 用于测试节点。类似于node,但是有可以用于测试的选项。
    arg 可以在launch文件中定义一个变量,以便在像下面这样运行时更改参数。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,468
精华内容 587
关键字:

机器人ros编程