ros基础

http://www.ncnynl.com/archives/201702/1305.html

ros 基础教程

1.mkdir  -p  ~/catkin_ws/src                       cd   ~/catkin_ws/     ->    catkin_make            source   devel/setup.bash

2.cd ~/catkin_ws/src     ->   catkin_create_pkg    test_p   std_msgs  rospy  roscpp

3.rospack  depends  test_p

4. <package.xml>

<?xml version="1.0"?>
<package>
<name>beginner_tutorials</name>
<version>0.1.0</version>
<description>The beginner_tutorials package</description>

<maintainer email="you@yourdomain.tld">Your Name</maintainer>
<license>BSD</license>
<url type="website">http://wiki.ros.org/beginner_tutorials</url>
<author email="you@yourdomain.tld">Jane Doe</author>

<buildtool_depend>catkin</buildtool_depend>

<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>

<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>

5. ros::Rate  loop_rate(10);           //发布消息的频率,10 Hz   每秒10次

     loop_rate.sleep();                      //根据之前的 ros::Rate  loop_rate(1) 的定义来控制发布话题德频率

6. n.getParam("my_param",s);

7. ros::Timer   timer = n.createrTimer(ros::Duration(0.1),timerCallback);  //创建定时器     void timerCallback(const ros::TimerEvent& e);

8. 如果想启动多个相同节点  使用   init_options::AnonymousName

9. signal(SIGINT, mySigintHandler);

10. 消息生成       package_name/msg/Foo.msg  ->  package_name::Foo           package_name/srv/Foo.srv -> package_name.Foo

11. MyMessage::_my_array_type::iterator  it = msg.my_array.begin();

12. 类方法做为回调函数:

        Foo foo_object;

        ros::ServiceServer   service = nh.advertiseService("my_service", &Foo::callback, &foo_object);

13. ros::Timer timer = nh.createTimer(ros::Duration(0.1),timerCallback);

14.// 单线程

      spinning();            ros::spinonce();

       ros::spin();           //用户的回调函数在ros::spin()中被调用

       ros::spinonce();  //定时运行,    ros::Rate r(10); //10Hz       ros::spinonce();    r.sleep();

//多线程

ros::MultiThreadedSpinner    spinner(4);   spinner.spin();         //阻塞式

ros::AsyncSpinner spinner(4);   spinner.start();   ros::witForShutdown();


15. ros::Duration(0.5).sleep();      //sleep for half a second

16. TF   数据类型:Quaternion , vector, Point, Pose, Transform

17.

  • 函数:tf::Quaternion createQuaternionFromRPY(double roll,double pitch,double yaw)
  • 作用:返回从固定轴的Roll, Pitch and Yaw(滚动,俯仰和偏转)构造的tf::Quaternion四元数
  • 函数:geometry_msgs::Quaternion createQuaternionMsgFromRollPitchYaw(double roll,double pitch,double yaw)
  • 作用:返回从固定轴的Roll, Pitch and Yaw(滚动,俯仰和偏转)构造的geometry_msgs::Quaternion四元数

18. Coodinate Frames( 坐标框架,坐标系)

       Transforms( 变换)

        TF

19.  pow()  求 x 的 y 次方

        atan2(double y, double x);         y为Y坐标,x为X坐标   返回角度(弧度).


20.

grep -ri "vector"    // vi 命令查找当前目录下关键字

21. robot_pose_ekf

listens:  /odom  <nav_msgs::Odometry> 2D pose

              /imu_data <sensor_msgs::Imu> 3D orientation

              /vo              <nav_msgs::Odometry>    3D pose

22.actionlib 工作

actionlib 使用client-server 工作模式.  ActionClinet 和 ActionServer 通过 Ros Action Protocol 通信


23. 路径跟踪:

   定义一个 tf listener ,以机器人当前位置建立的坐标系拿出目标点的相对位置, 发送速度  x 方向的速度可以为定值, z轴角速度为   a × atan2(@y,@x);

   listener.transformPoint("/base_link",goal_point,robot_world);        goal_point 为pose 类型, robot_world 为goal_point 在base_link 坐标下的位置。

   有时候要在上一句前面加上    listener.waitForTransform("/base_link","/map",ros::Time(0),ros::Duration(3));  

24: 节点运行中如果要读文件, 填写相对位置,发现节点的当前目录为 catkin.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值