实验编号: 实验指导书 实验项目: ROS基本元素实验 所属课程: ROS机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年月 日
实验编号: 实 验 指 导 书 实验项目: ROS 基本元素实验 所属课程: ROS 机器人操作系统基础与实战 课程代码: 面向专业: 机电专业 课程负责人: 朱笑笑 年 月 日
实验目的 通过实际动手操作和观察体验,让学生熟悉OS程序的创建、运行、编译等。 、 实验内容 1 运行一个已安装Node 2. 编写一个程序 3. 观察ROS计算图结构的性质 三、 实验过程或其他示意图 1.运行一个已安装Node 通过ROS己有安装的包对各种计算图元素进行测试。rqt_graph命令显示当前环境的计算 图结构 1.1用roscoret命令开启master roscore是在运行所有ROS程序前首先要运行的命令。有如下类似输出信息: ..logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch- machine name-13039.log Checking log directory for disk usage.This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage.Usage is <1GB. started roslaunch server http://machine name:33919/ ros_comm version 1.4.7 SUMMARY ======== PARAMETERS */rosversion /rosdistro NODES auto-starting new master process[master]:started with pid [13054] ROS_MASTER_URI=http://machine name:11311/ setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf -2-
- 2 - 一、 实验目的 通过实际动手操作和观察体验,让学生熟悉ROS程序的创建、运行、编译等。 二、 实验内容 1. 运行一个已安装Node 2. 编写一个程序 3. 观察ROS计算图结构的性质 三、 实验过程或其他示意图 1. 运行一个已安装Node 通过ROS已有安装的包对各种计算图元素进行测试。rqt_graph命令显示当前环境的计算 图结构 1.1 用roscore命令开启master roscore 是在运行所有ROS程序前首先要运行的命令。有如下类似输出信息: ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch- machine_name-13039.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://machine_name:33919/ ros_comm version 1.4.7 SUMMARY ======== PARAMETERS * /rosversion * /rosdistro NODES auto-starting new master process[master]: started with pid [13054] ROS_MASTER_URI=http://machine_name:11311/ setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]:started with pid [13067] started core service [/rosout] l.2.rosnode使用 打开一个新的终端,可以使用rosnode像运行roscore一样看看在运行什么.… rosnode有以下功能: rosnode list:显示当前活动的node rosnode info node:打印node的信息 rosnode kill node:关闭一个node或者发送一个信号 rosnode machine hostname:显示在一台特定主机上运行的node或者显示主机列表 rosnode ping node:测试node的可连接性 rosnode cleanup:清除已经失效的node 在终端中运行 rosnode list 将会返回 /rosout 这表示当前只有一个节点在运行:rOs0ut。因为这个节点用于收集和记录节点调试输出 信息,所以它总是在运行的。 测试rosnode info命令 rosnode info /rosout 返回 Node [/rosout] Publications: /rosout agg [rosgraph_msgs/Log] Subscriptions: /rosout [unknown type] Services: /rosout/set logger level */rosout/get_loggers contacting node http://machine name:54614/... -3-
- 3 - process[rosout-1]: started with pid [13067] started core service [/rosout] 1.2. rosnode 使用 打开一个新的终端, 可以使用 rosnode 像运行 roscore 一样看看在 运行什么... rosnode有以下功能: rosnode list: 显示当前活动的node rosnode info node: 打印node的信息 rosnode kill node: 关闭一个node或者发送一个信号 rosnode machine hostname: 显示在一台特定主机上运行的node或者显示主机列表 rosnode ping node: 测试node的可连接性 rosnode cleanup: 清除已经失效的node 在终端中运行 rosnode list 将会返回 /rosout 这表示当前只有一个节点在运行: rosout。因为这个节点用于收集和记录节点调 试输出 信息,所以它总是在运行的。 测试 rosnode info 命令 rosnode info /rosout 返回 ------------------------------------------------------------- ----------- Node [/rosout] Publications: * /rosout_agg [rosgraph_msgs/Log] Subscriptions: * /rosout [unknown type] Services: * /rosout/set_logger_level * /rosout/get_loggers contacting node http://machine_name:54614/
Pid:5092 1.3运行rosrun rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。 用法: rosrun[package_name][node_name]/运行一个ROS包中的一个node rosrun package node_parameter:=value/运行node时将parameter参数设置为 value 其中parameter可以是用户自定义的参数,或者是系统定义的参数如: _name:This is a special reserved keyword for the name of the node _log:This is a reserved keyword that designates the location where the _ip andhostname:These are substitutes for ROS IP and ROS HOSTNAME _master:This is a substitute for ROS MASTER URI _ns:This is a substitute for ROS NAMESPACE rosrun package node topicoldName:newName /运行node将其中的一个topic的名字修改为newName rosrun --prefix 'gdb -ex run --args'my_package my_node /-prefix前缀用于调试 现在我们可以运行turtlesim包中的turtlesim node。 然后,在一个新的终端: rosrun turtlesim turtlesim node 你会看到turtlesim窗口: -4-
- 4 - Pid: 5092 1.3 运行 rosrun rosrun 允许你使用包名直 接运行一个包内的节点(而不需要知道这个包的路径)。 用法: rosrun [package_name] [node_name] //运行一个 ROS 包中的一个 node rosrun package node _parameter:=value //运行 node 时将 parameter 参数设置为 value 其中 parameter 可以是用户自定义的参数,或者是系统定义的参数如: __name: This is a special reserved keyword for the name of the node __log: This is a reserved keyword that designates the location where the __ip and __hostname: These are substitutes for ROS_IP and ROS_HOSTNAME __master: This is a substitute for ROS_MASTER_URI __ns: This is a substitute for ROS_NAMESPACE rosrun package node topicOldName: = newName //运行 node 将其中的一个 topic 的名字修改为 newName rosrun --prefix 'gdb -ex run --args' my_package my_node //--prefix 前缀用于调试 现在我们可以运行 turtlesim 包中的 turtlesim_node。 然后, 在一个新的终端: $ rosrun turtlesim turtlesim_node 你会看到 turtlesim 窗口:
TurtleSim ✉× 2.编写一个程序 编写一个发送端,监听端程序。 2.1新建一个文件夹作为堆 cd ~/catkin ws/src mkdir -p chapter2/intro to ros cd chapter2/intro to ros 2.2创建一个talker的R0S包 利用catkin_create_,pkg命令创建一个名为talkerf的,后面几项std_msgs roscpp为这个 ROS包的一些依赖项。 catkin create pkg talker std msgs roscpp 创建完成后我们可以观察生成的文件结构, talker/ CMakeLists.txt package.xml 我们再创建一个src文件夹 cd talker mkdir src cd src 创建一个talker.cpp文件 gedit talker.cpp -5-
- 5 - 2.编写一个程序 编写一个发送端,监听端程序。 2.1新建一个文件夹作为堆 cd ~/catkin_ws/src mkdir –p chapter2/intro_to_ros cd chapter2/intro_to_ros 2.2创建一个talker的ROS包 利用catkin_create_pkg命令创建一个名为talker的,后面几项std_msgs roscpp为这个 ROS包的一些依赖项。 catkin_create_pkg talker std_msgs roscpp 创建完成后我们可以观察生成的文件结构, talker/ CMakeLists.txt package.xml 我们再创建一个src文件夹 cd talker mkdir src cd src 创建一个talker.cpp文件 gedit talker.cpp