21讲代码和课件百度网盘链接:https://pan.baidu/s/1dTs-IcGECovdRD19otQABQ
提取码:0000
一、ROS是什么?
ROS是机器人操作系统(Robot Operating System)的英文缩写
一个好比喻:机器人上跑ROS=PC上跑windows=手机上跑安卓
二、ROS安装及对应版本
2.1鱼香ROS一键安装 其中还可以选择一键安装其它一些应用,推荐
wget http://fishros/install -O fishros && bash fishros
2.2 ubuntu16.04对应ros-kinetic;
ubuntu18.04对应ros-melodic;
ubuntu20.04对应ros-noetic
2.3 rosdep无法更新,解决:一行代码安装rosdepc
curl http://fishros/tools/install/rosdepc | bash
2.4 小海龟测试
roscore //启动
rosrun turtlesim turtlesim_node //仿真
rosrun turtlesim turtle_teleop_key //键盘控制
三、ros核心概念
3.1 节点-执行单元(各 .cpp文件)
3.2 话题(topic)---异步通信机制
(1)节点间用来传输数据的重要总线
(2)使用发布/订阅模型,数据由发布者传到订阅者,同一个话题的订阅者或发布者可以不唯一。
3.3 消息(message)--话题数据
(1)用编程语言无关的.msg文件定义,编译过程生成对应的代码文件
3.3 服务(service)---同步通信机制
(1)使用客户端/服务端模型,客户端发送请求数据,服务完成处理后返回数据;
(2)使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程生成对应的代码文件;
四、ROS常用命令行指令
rostopic 查看话题相关
rosservice 服务相关
rosnode 节点相关
rosparam 参数相关
例如: 输入rosnode 查看后面可接命令及其对应说明,其它命令类似
再例如:输入topic 接pub -r 10 表示给话题发布一个每秒10次的频率指令
再一个话题记录和复现指令:
rosbag record -a -O cmd-recode //开始记录路径,按ctrl+c结束,文件在当前路径下
rosbag play cmd_record.bag //重新打开小乌龟,按包的路径行驶
五、创建工作空间和功能包
5.1 src:代码空间(装各个功能包 build:编译空间 devel:开发空间 install:安装空间
mkdir -p ~/catkin_ws/src //创建ros工作空间,我叫它大包
cd ~/catkin_ws/src //src下每个文件夹代表一个package,每个pakage下的.cpp文件是一个ROS节点
catkin_init_workspace //初始化src空间
cd ~/catkin_ws/ //进入大包编译,每一次改动工作空间内的内容都要重新进大包编译
catkin_make
source devel/setup.bash //编译后更新
5.2 创建功能包:进入大包的src下创建,test_pkg代表功能包,这三个std_msgs rospy roscpp等等就是运行test_pkg包所需依赖。出现CM和package表示创建成功。然后回到大包:编译---->更新
catkin_creat_pkg test_pkg std_msgs rospy roscpp
六、发布者publisher的编程实现---发布velocity_publisher.cpp(将其放入对应功能包的src下)
6.1进入src下创建learning_topic功能包,上面的test_pkg也就是指这种包,后面类似
catkin_creat_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
6.2在功能包下的CMakeLists.txt文件中加如相应cmake语句
add_executable(velocity_publisher src/velocity_publisher.cpp) //连接可执行程序
target_link_libraries(velocity_publisher ${catkin_LIBRARIES}) //将此程序连接库
每次作修改都需要回大包编译更新。下面全默认该操作,就不再写了。
6.3 操作及结果如下
roscore //启动
rosrun turtlesim turtlesim_node //仿真
rosrun learning_topic velocity_publisher //启动velocity_publisher节点
七、订阅者Subscriber的编程实现--订阅pose_subscriber.cpp
7.1还是在learning_topic功能包下
7.2在功能包下的CMakeLists.txt文件中加如相应cmake语句
add_executable(pose_subscriber src/pose_subscriber.cpp )
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
7.3和上面一样,第三步换成启动pose_subscriber节点,结果如下
八、话题消息的自定义和使用
8.1自定义Person.msg文件,该文件在learning_topic下的msg里
8.2在packaga.xml文件中加入自定义包依赖
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>
8.3 CMakeLists.txt文件中加如相应cmake语句
find_package(.......message_generation)
add_message_files( FILES Person.msg) //连接依赖
generate_messages( DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime)
add_executable(person_publisher src/person_publisher.cpp ) //连接2个节点
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)
8.4 操作及结果如下
九、客户端client的编程实现----turtle_spawn.cpp
9.1 进入大包的src下---创建learning_service功能包
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim
9.2 CMakeLists.txt文件中加如相应cmake语句
add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})
9.3 操作及结果如下
十、服务端server的编程实现---turtle_command_server.cpp
10.1 还是在learning_service功能包下
10.2 CMakeLists.txt文件中加如相应cmake语句
add_executable(turtle_command_server src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server ${catkin_LIBRARIES})
10.3 操作及结果如下
十一、服务数据的自定义与使用--person_client.cpp和person_server.cpp
11.1 还是在learning_service功能包下,创建srv文件夹,再在其下创建Person.srv文件
11.2在package.xml中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
11.3 CMakeLists.txt文件中加如相应cmake语句
find_package(.......message_generation)
add_message_files( FILES Person.srv) //连接依赖
generate_messages( DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime)
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)
11.4 操作及结果如下 十二、参数的使用与编程方法--parameter_config.cpp
12.1 rosparam---各后接命令
12.2 例如操作如下,示范用dump命令 将全部参数转成当前目录的文件
12.3 创建learning_parameter功能包
catkin_creat_pkg learning_parameter roscpp rospy std_srvs
12.4 CMakeLists.txt文件中加如相应cmake语句
add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})
12.5 操作乌龟背景板变白色
十三、ROS中的坐标系管理系统
13.1先安装tf包
sudo apt install ros-melodic-turtle-tf //melodic换成自己对应ros版本
13.2 操作及结果如下
13.3 在上述操作基础上再输入 5 6 指令,然后操作7-fixed reame修改为world坐标系,再8-添加tf
十四、tf坐标系广播与监听的编程实现---turtle_tf_broadcaster.cpp和turtle_tf_listener.cpp
14.1创建learning_tf功能包
catkin_creat_pkg learning_tf roscpp rospy tf turtlesim
14.2配置相应CMakeLists.txt文件
add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp)
target_link_libraries(turtle_tf_broadcaster ${catkin_LIBRARIES})
add_executable(turtle_tf_listener src/turtle_tf_listener.cpp)
target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES})
14.3操作及结果如下
十五、launch启动文件的使用方法
15.1 launch文件:通过xml文件实现多节点的配置和启动
15.2launch文件语法: pkg是功能包名,type是节点(.cpp)文件名,name是这个节点在运行中的起名
15.3 启动simple.launch 可以看到同时启动了里面的两个节点
15.4 启动turtlesim_parameter_config.launch节点,可以看到参数加在节点下面,就带节点当前缀
15.5 同理turtlesim_remap.launch节点,可以看到remap是将参数名字改为了后面的,include则是可以包含其它的launch文件,类似于C语言中的头文件包含
21讲代码和课件百度网盘链接:https://pan.baidu/s/1dTs-IcGECovdRD19otQABQ
提取码:0000
一、ROS是什么?
ROS是机器人操作系统(Robot Operating System)的英文缩写
一个好比喻:机器人上跑ROS=PC上跑windows=手机上跑安卓
二、ROS安装及对应版本
2.1鱼香ROS一键安装 其中还可以选择一键安装其它一些应用,推荐
wget http://fishros/install -O fishros && bash fishros
2.2 ubuntu16.04对应ros-kinetic;
ubuntu18.04对应ros-melodic;
ubuntu20.04对应ros-noetic
2.3 rosdep无法更新,解决:一行代码安装rosdepc
curl http://fishros/tools/install/rosdepc | bash
2.4 小海龟测试
roscore //启动
rosrun turtlesim turtlesim_node //仿真
rosrun turtlesim turtle_teleop_key //键盘控制
三、ros核心概念
3.1 节点-执行单元(各 .cpp文件)
3.2 话题(topic)---异步通信机制
(1)节点间用来传输数据的重要总线
(2)使用发布/订阅模型,数据由发布者传到订阅者,同一个话题的订阅者或发布者可以不唯一。
3.3 消息(message)--话题数据
(1)用编程语言无关的.msg文件定义,编译过程生成对应的代码文件
3.3 服务(service)---同步通信机制
(1)使用客户端/服务端模型,客户端发送请求数据,服务完成处理后返回数据;
(2)使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程生成对应的代码文件;
四、ROS常用命令行指令
rostopic 查看话题相关
rosservice 服务相关
rosnode 节点相关
rosparam 参数相关
例如: 输入rosnode 查看后面可接命令及其对应说明,其它命令类似
再例如:输入topic 接pub -r 10 表示给话题发布一个每秒10次的频率指令
再一个话题记录和复现指令:
rosbag record -a -O cmd-recode //开始记录路径,按ctrl+c结束,文件在当前路径下
rosbag play cmd_record.bag //重新打开小乌龟,按包的路径行驶
五、创建工作空间和功能包
5.1 src:代码空间(装各个功能包 build:编译空间 devel:开发空间 install:安装空间
mkdir -p ~/catkin_ws/src //创建ros工作空间,我叫它大包
cd ~/catkin_ws/src //src下每个文件夹代表一个package,每个pakage下的.cpp文件是一个ROS节点
catkin_init_workspace //初始化src空间
cd ~/catkin_ws/ //进入大包编译,每一次改动工作空间内的内容都要重新进大包编译
catkin_make
source devel/setup.bash //编译后更新
5.2 创建功能包:进入大包的src下创建,test_pkg代表功能包,这三个std_msgs rospy roscpp等等就是运行test_pkg包所需依赖。出现CM和package表示创建成功。然后回到大包:编译---->更新
catkin_creat_pkg test_pkg std_msgs rospy roscpp
六、发布者publisher的编程实现---发布velocity_publisher.cpp(将其放入对应功能包的src下)
6.1进入src下创建learning_topic功能包,上面的test_pkg也就是指这种包,后面类似
catkin_creat_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
6.2在功能包下的CMakeLists.txt文件中加如相应cmake语句
add_executable(velocity_publisher src/velocity_publisher.cpp) //连接可执行程序
target_link_libraries(velocity_publisher ${catkin_LIBRARIES}) //将此程序连接库
每次作修改都需要回大包编译更新。下面全默认该操作,就不再写了。
6.3 操作及结果如下
roscore //启动
rosrun turtlesim turtlesim_node //仿真
rosrun learning_topic velocity_publisher //启动velocity_publisher节点
七、订阅者Subscriber的编程实现--订阅pose_subscriber.cpp
7.1还是在learning_topic功能包下
7.2在功能包下的CMakeLists.txt文件中加如相应cmake语句
add_executable(pose_subscriber src/pose_subscriber.cpp )
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
7.3和上面一样,第三步换成启动pose_subscriber节点,结果如下
八、话题消息的自定义和使用
8.1自定义Person.msg文件,该文件在learning_topic下的msg里
8.2在packaga.xml文件中加入自定义包依赖
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>
8.3 CMakeLists.txt文件中加如相应cmake语句
find_package(.......message_generation)
add_message_files( FILES Person.msg) //连接依赖
generate_messages( DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime)
add_executable(person_publisher src/person_publisher.cpp ) //连接2个节点
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)
8.4 操作及结果如下
九、客户端client的编程实现----turtle_spawn.cpp
9.1 进入大包的src下---创建learning_service功能包
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim
9.2 CMakeLists.txt文件中加如相应cmake语句
add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})
9.3 操作及结果如下
十、服务端server的编程实现---turtle_command_server.cpp
10.1 还是在learning_service功能包下
10.2 CMakeLists.txt文件中加如相应cmake语句
add_executable(turtle_command_server src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server ${catkin_LIBRARIES})
10.3 操作及结果如下
十一、服务数据的自定义与使用--person_client.cpp和person_server.cpp
11.1 还是在learning_service功能包下,创建srv文件夹,再在其下创建Person.srv文件
11.2在package.xml中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
11.3 CMakeLists.txt文件中加如相应cmake语句
find_package(.......message_generation)
add_message_files( FILES Person.srv) //连接依赖
generate_messages( DEPENDENCIES std_msgs)
catkin_package(CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime)
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)
11.4 操作及结果如下 十二、参数的使用与编程方法--parameter_config.cpp
12.1 rosparam---各后接命令
12.2 例如操作如下,示范用dump命令 将全部参数转成当前目录的文件
12.3 创建learning_parameter功能包
catkin_creat_pkg learning_parameter roscpp rospy std_srvs
12.4 CMakeLists.txt文件中加如相应cmake语句
add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})
12.5 操作乌龟背景板变白色
十三、ROS中的坐标系管理系统
13.1先安装tf包
sudo apt install ros-melodic-turtle-tf //melodic换成自己对应ros版本
13.2 操作及结果如下
13.3 在上述操作基础上再输入 5 6 指令,然后操作7-fixed reame修改为world坐标系,再8-添加tf
十四、tf坐标系广播与监听的编程实现---turtle_tf_broadcaster.cpp和turtle_tf_listener.cpp
14.1创建learning_tf功能包
catkin_creat_pkg learning_tf roscpp rospy tf turtlesim
14.2配置相应CMakeLists.txt文件
add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp)
target_link_libraries(turtle_tf_broadcaster ${catkin_LIBRARIES})
add_executable(turtle_tf_listener src/turtle_tf_listener.cpp)
target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES})
14.3操作及结果如下
十五、launch启动文件的使用方法
15.1 launch文件:通过xml文件实现多节点的配置和启动
15.2launch文件语法: pkg是功能包名,type是节点(.cpp)文件名,name是这个节点在运行中的起名
15.3 启动simple.launch 可以看到同时启动了里面的两个节点
15.4 启动turtlesim_parameter_config.launch节点,可以看到参数加在节点下面,就带节点当前缀
15.5 同理turtlesim_remap.launch节点,可以看到remap是将参数名字改为了后面的,include则是可以包含其它的launch文件,类似于C语言中的头文件包含