ros学习笔记

   

目录

1.如何创建工作空间

2.如何创建功能包

3.ros工作空间介绍

4.简单的创建订阅与接收节点(python)

 5.查看节点数据

6.如何直接添加源:

7.创建(.cpp)节点

8.如何用.launch 同时运行多个节点

9.安装vim 应用

10.录数据

11.查看指令历史

12. 查看当前串口连接

13. 查看程序包

14.远程访问

15.远程数据复制

16.锁存话题



1.如何创建工作空间

mkdir -p ~/catkin_ws/src  

cd ~/catkin_ws/src

catkin_init_workspace

cd ~/catkin_ws 进入到工作空间,cd 进入 cd ..退出

catkin_make编译工作空间

2.如何创建功能包

catkin_create_pkg  功能包名字  依赖项

cd ~/catkin_ws/src

catkin_create_pkg test-py rospy  备注:该包依赖已存在的rospy包,下可以执行python文件

3.ros工作空间介绍

src文件夹叫源文件空间:放置功能包、项目、克隆包等 

build文件夹叫做编译空间,CMake和catkin为功能包和项目保存缓存信息和配置

devel 叫做开发空间,保存编译后的程序

4.简单的创建订阅与接收节点(python)

cd ~/catkin_ws/src/test-py/src

touch topic_publisher.py

touch topic_subscriber.py

创建两个python文件(也可以右键创建,直接起名字)

打开

gedit topic_publisher.py

#!/usr/bin/env python

import rospy
from std_msgs.msg import Int32

rospy.init_node('topic_publisher')

pub=rospy.Publisher('counter',Int32)

rate=rospy.Rate(2)

count=0

while not rospy.is_shutdown():
     pub.publish(count)
     count+=1
     rate.sleep() 

 

同样topic_subscriber.py

#!/usr/bin/env python

import rospy
from std_msgs.msg import Int32

def callback(msg):
    print msg.data
rospy.init_node('topic_subscriber')
sub=rospy.Subscriber('counter',Int32,callback)
rospy.spin()

cd ~/catkin_ws

catkin_make

Ctrl+shift+T 打开新终端

运行roscore可理解为ros运行的底层支持

roscore

点击上边切回原来终端:

cd ~/catkin_ws

source devel/setup.bash       备注:ros可创建很多工作区,执行哪个工作区就需要执行此命令

rosrun test-py  topic_publisher.py

找到文件右键->权限->执行勾选允许作为程序执行文件

 

 5.查看节点数据

Ctrl+shift+T

rostopic list      备注:查看当前运行的节点,counter 与topic_publisher里的代码 置pub=rospy.Publisher('counter',Int32)

rostopic echo  /counter    查看某一节点数据

其他功能  rostopic -h

运行订阅节点

cd ~/catkin_ws

source devel/setup.bash

rosrun test-py topic_subscriber.py    备注与其回调函数有关def callback(msg): print msg.data  当节点接收到数据就会进行打印

查看节点关系图

Ctrl+shift+T

rqt_graph      

图像话查看数据

rqt

一般在运行一个功能空间时,要先输入source ~/catkin_ws/devel/setup.bash

打开新终端输入:

sudo gedit .bashrc

在最后面添加 source ~/catkin_ws/devel/setup.bash

就可直接运行

7.创建(.cpp)节点

创建节点,打开新终端 ctrl+alt+T

cd ~/catkin_ws/src

catkin_create_pkg test-cpp roscpp std_msgs     备注:该包依赖roscpp,可以执行c++文件,此方法生成的文件不用修改.xml文件

cd test-cpp/src

touch a.cpp 创建一个.cpp文件

节点名node_a

发布消息程序如下

#include "ros/ros.h"    //包含了使用ROS节点的必要文件
#include "std_msgs/String.h"    //包含了使用的数据类型
#include <sstream>
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "node_a");    //初始化ROS,节点名命名为node_a,节点名必须保持唯一
    ros::NodeHandle n;    //实例化节点, 节点进程句柄
    ros::Publisher pub = n.advertise<std_msgs::String>("str_message", 1000);    //告诉系统要发布话题了,话题名为“str_message”,类型为std_msgs::String,缓冲队列为1000。
ros::Rate loop_rate(10);    //设置发送数据的频率为10Hz
//ros::ok()返回false会停止运行,进程终止。
    while(ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss<<"Hello World";
        msg.data = ss.str();
        ROS_INFO("node_a is publishing %s", msg.data.c_str());
        pub.publish(msg);    //向话题“str_message”发布消息
        ros::spinOnce();    //不是必须,若程序中订阅话题则必须,否则回掉函数不起作用。
        loop_rate.sleep();    //按前面设置的10Hz频率将程序挂起
    }
 
    return 0;
}

接受节点文件名b.cpp,节点名node_b

#include "ros/ros.h"
#include "std_msgs/String.h"
//话题回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("node_b is receiving [%s]", msg->data.c_str());
}
 
 
int main(int argc, char **argv)
{
    ros::init(argc, argv, "node_b");    //初始化ROS,节点命名为node_b,节点名必须唯一。
    ros::NodeHandle n;    //节点句柄实例化
    ros::Subscriber sub = n.subscribe("str_message", 1000, chatterCallback);    //向话题“str_message”订阅,一旦发布节点(node_a)在该话题上发布消息,本节点就会调用chatterCallbck函数。
 
    ros::spin();    //程序进入循环,直到ros::ok()返回false,进程结束。
 
    return 0;
}

编号程序,想要节点运行,还需在编写 CMakeLists,txt文件,在末尾添加如下

include_directories(
    include
    ${catkin_INCLUDE_DIRS}
)
add_executable(test_a src/a.cpp)    
add_executable(test_b src/b.cpp)

target_link_libraries(test_a ${catkin_LIBRARIES})   
target_link_libraries(test_b ${catkin_LIBRARIES})

在终端中输入

cd ~/catkin_ws

catkin_make

 

 

 

8.如何用.launch 同时运行多个节点

在功能包下创建一个专门放launch文件的包

cd  ~/catkin_ws/src/test-cpp

mkdir launch

cd launch

touch a.launch

gedit a.launch

<launch>

<node name="test_a" pkg="test-cpp" type="test_a"/>
<node name="test_b" pkg="test-cpp" type="test_b"/>

</launch>

 cd ~/catkin_ws

source devel/setup.bash

 roslaunch test-cpp a.launch

9.安装vim 应用

cd 到文件夹目录

vim 文件名.launch 

按i可以编辑

退出按esc,按 

:w 保存

:q  退出

10.录数据

rosbag record /counter   结束后会有包名,录制传感器数据

rosbag info 包名.bag   包名根据上述文件结果更改,查看录包大小数据

rosbag play 包名.bag   包名根据回放数据进行更改,可以将传感器数据回放,进行仿真

11.查看指令历史

history

12. 查看当前串口连接

ls /dev | grep USB

13. 查看程序包

rospack list

14.远程访问

ssh 用户名@IP地址 

15.远程数据复制

scp 用户名@IP地址:~/文件名   ./

16.锁存话题

一条消息发布的时候,如果没有及时订阅它的消息,将错过这个消息。对于大文件改变不大的文件,如Map等,可使用锁存话题的方法解决问题。当话题为锁存状态时,订阅者在完成订阅后会自动获取话题发布的最后一个消息,锁存的话题为需要广播消息的话题,方法如下:

pub=rospy.Pushlisher('map',nav_msgs/OccupancyGrid,latched=True)

17.下载的程序自动添加依赖

rosdep install --from-paths src --ignore-src --rosdistro kinetic

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值