当前位置:   article > 正文

Ros by example 学习中问题_all log files can be found below

all log files can be found below

一、出现的问题

 问题一  运行RViz显示:Vmware:vmw_ioctl command error

解决方法:

1. 先运行roscore 和 rosrun rviz rviz检查RViz是否正常

2.添加如下语句

  1. echo "export SVGA_VGPU10=0" >> ~/.bashrc
  2. 或者
  3. echo "export LIBGL_ALWAYS_SOFTWARE=1" >> ~/.bashrc

问题二 Ubuntu 终端运行 sudo apt-get update 时 出现无法下载 http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary-amd64/Packages  404  Not Found

 解决方法:

1.切换到对应的ppa目录

cd /etc/apt/sources.list.d
2.在该目录下ls,即可以看到对应的无法下载的fcitx-team-ubuntu-nightly-xenial.list

 3. 删除.list文件,安全起见,可以进行添加后缀.bak的备份

sudo mv fcitx-team-ubuntu-nightly-xenial.list fcitx-team-ubuntu-nightly-xenial.list.bak

4.重新更新

sudo apt-get update

问题三 无法定位软件包问题 ros-melodic

  1. //1. 添加源
  2. sudo vim /etc/apt/sources.list.d/ros-latest.list
  3. //2.添加如下内容
  4. deb https://mirrors.ustc.edu.cn/ros/ubuntu/ bionic main
  5. //3.进行更新
  6. sudo apt-get update
  7. //4. 重新安装软件包
  8. sudo apt-get install ros-melodic-navigation

问题四 无法访问Github

  1. git config --global url."https://".insteadOf git://
  2. sudo apt-get update

二、实际操作

内容一  从Github上下载代码

1.创建工作空间

  1. mkdir catkin_ws
  2. cd catkin_ws
  3. mikdir src
  4. cd src // src为source缩写,用来放置源代码
  5. //先确认linux已下载git工具
  6. sudo apt install git

2.下载源代码(将htps:改为git:)

git clone git://github.com/6-robot/wpr_simulation.git

3.配置依赖包脚本文件(在sripts中)

 

 4.编译工作区

  1. cd ~/catkin_ws/ //返回工作区文件夹
  2. catkin_make //编译文件

 5.载入工作空间环境变量(否则会报错找不到软件包)

source ~/catkin_ws/devel/setup.bash

6.启动源代码

roslaunch wpr_simulaton wpb_simple.launch

7.工作空间环境变量添加进终端初始化脚本(.bashrc)

gedit ~/.bashrc

 内容2 超级终端使用

 内容3 ros节点的建立

catkin_create_pkg ssr_pkg rospy roscpp std_msgs //其中rospy roscpp std_msgs为通用包

语句序号分别为133 149

 内容4 话题发布者与订阅者

发布者

  1. #include<ros/ros.h>
  2. #include<std_msgs/String.h> //引用消息标准类型
  3. int main(int argc, char *argv[])
  4. {
  5. ros::init(argc,argv,"chao_node");
  6. printf("Hello World!\n");
  7. ros::NodeHandle nh; //大管家
  8. ros::Publisher pub = nh.advertise<std_msgs::String>("kuai_shang_che", 10); //“kuai_shang_che"为主题名, 10为缓存长度
  9. ros::Rate loop_rate(10);//设置循环次数
  10. while(ros::ok())
  11. {
  12. printf("我要刷屏了\n");
  13. std_msgs::String msg; //生成消息包
  14. msg.data= "带飞"; //从index可看string类型为data
  15. pub.publish(msg); //发布消息
  16. loop_rate.sleep();
  17. }
  18. return 0;
  19. }

订阅者

  1. #include<ros/ros.h>
  2. #include<std_msgs/String.h>
  3. void chao_callback(std_msgs::String msg) //回调函数
  4. {
  5. ROS_INFO( msg.data.c_str( ) ); //确定打印的为string类型
  6. printf("\n");
  7. }
  8. int main(int argc, char *argv[])
  9. {
  10. setlocale(LC_ALL, ""); //显示中文
  11. ros::init(argc,argv,"ma_node");
  12. ros::NodeHandle nh;
  13. ros::Subscriber sub = nh.subscribe("kuai_shang_che",10, chao_callback); //确定订阅的话题,存储长度,回调函数
  14. while(ros::ok( ))
  15. {
  16. ros::spinOnce(); //中断
  17. }
  18. return 0;
  19. }

 

 

 内容5 使用roslaunch

内容五 机器人运动控制

 速度:m/s

旋转:rad/s

内容六 激光雷达

包:sensor_msgs

显示话题中的消息类型:

rostopic echo /scan --noarr

创建激光雷达包(需要引入sensor_msgs的支持包)

robot@wp:~/ros_example/src$ catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs

  1. #include<ros/ros.h>
  2. #include<sensor_msgs/LaserScan.h>
  3. void LidarCallback(const sensor_msgs::LaserScan msg)
  4. {
  5. float fMidDist = msg.ranges[180]; //显示正前方的数
  6. ROS_INFO("前方测距 ranges[180] = %f 米", fMidDist);
  7. }
  8. int main(int argc, char *argv[])
  9. {
  10. setlocale(LC_ALL,""); //设置为中文
  11. ros::init(argc, argv, "lidar_node");
  12. ros::NodeHandle n;
  13. ros::Subscriber lidar_sub = n.subscribe("/scan", 10, &LidarCallback);
  14. ros::spin( ); //保持运行别退出
  15. return 0;
  16. }

内容七 激光雷达避障

  1. #include<ros/ros.h>
  2. #include<sensor_msgs/LaserScan.h> //雷达消息格式头文件
  3. #include <geometry_msgs/Twist.h> //速度消息格式头文件
  4. ros::Publisher vel_pub;
  5. void LidarCallback(const sensor_msgs::LaserScan msg)
  6. {
  7. float fMidDist = msg.ranges[180]; //显示正前方的数
  8. ROS_INFO("前方测距 ranges[180] = %f 米", fMidDist);
  9. geometry_msgs::Twist vel_cmd;
  10. if(fMidDist < 1.5)
  11. {
  12. vel_cmd.angular.z = 0.3; //左传
  13. }
  14. else
  15. {
  16. vel_cmd.linear.x = 0.05;
  17. }
  18. vel_pub.publish(vel_cmd);
  19. }
  20. int main(int argc, char *argv[])
  21. {
  22. setlocale(LC_ALL,""); //设置为中文
  23. ros::init(argc, argv, "lidar_node");
  24. ros::NodeHandle n;
  25. ros::Subscriber lidar_sub = n.subscribe("/scan", 10, &LidarCallback);
  26. vel_pub=n.advertise<geometry_msgs::Twist>("/cmd_vel", 10);
  27. ros::spin( ); //保持运行别退出
  28. return 0;
  29. }

 内容八 IMU传感器

其中orientation为内部解算得到的姿态,是一个四元数

官方话题定义:

 

  1. #include<ros/ros.h>
  2. #include<sensor_msgs/Imu.h>
  3. #include<tf/tf.h>
  4. void IMUCallBack(sensor_msgs::Imu msg)
  5. {
  6. if(msg.orientation_covariance[0]< 0) //检查数据是否存在
  7. return;
  8. tf::Quaternion quaternion( //将消息包内的四元数转化为四元数对象
  9. msg.orientation.x,
  10. msg.orientation.y,
  11. msg.orientation.z,
  12. msg.orientation.w
  13. );
  14. double roll, pitch, yaw;
  15. tf::Matrix3x3(quaternion).getRPY(roll,pitch,yaw); //转化成欧拉角(弧度制)
  16. roll=roll*180/M_PI; //弧度制转化为角度制
  17. pitch=pitch*180/M_PI;
  18. yaw= yaw*180/M_PI;
  19. ROS_INFO("滚转= %.0f 俯仰 =%.0f 朝向= %.0f",roll, pitch, yaw);
  20. }
  21. int main(int argc, char *argv[])
  22. {
  23. setlocale(LC_ALL, "");
  24. ros::init(argc, argv, "imu_node");
  25. ros::NodeHandle n;
  26. ros::Subscriber imu_sub=n.subscribe("/imu/data", 10, IMUCallBack);
  27. ros::spin( );
  28. return 0;
  29. }

内容八 IMU传感器与速度联合

  1. #include<ros/ros.h>
  2. #include<sensor_msgs/Imu.h>
  3. #include<tf/tf.h>
  4. #include <geometry_msgs/Twist.h>
  5. ros::Publisher vel_pub;
  6. void IMUCallBack(sensor_msgs::Imu msg)
  7. {
  8. if(msg.orientation_covariance[0]< 0) //检查数据是否存在
  9. return;
  10. tf::Quaternion quaternion( //将消息包内的四元数转化为四元数对象
  11. msg.orientation.x,
  12. msg.orientation.y,
  13. msg.orientation.z,
  14. msg.orientation.w
  15. );
  16. double roll, pitch, yaw;
  17. tf::Matrix3x3(quaternion).getRPY(roll,pitch,yaw); //转化成欧拉角(弧度制)
  18. roll=roll*180/M_PI; //弧度制转化为角度制
  19. pitch=pitch*180/M_PI;
  20. yaw= yaw*180/M_PI;
  21. ROS_INFO("滚转= %.0f 俯仰 =%.0f 朝向= %.0f",roll, pitch, yaw);
  22. double target_yaw = 90;
  23. double diff_angle = target_yaw - yaw;
  24. geometry_msgs::Twist vel_cmd;
  25. vel_cmd.angular.z = diff_angle*0.01;
  26. vel_cmd.linear.x=0.1;
  27. vel_pub.publish(vel_cmd);
  28. }
  29. int main(int argc, char *argv[])
  30. {
  31. setlocale(LC_ALL, "");
  32. ros::init(argc, argv, "imu_node");
  33. ros::NodeHandle n;
  34. ros::Subscriber imu_sub=n.subscribe("/imu/data", 10, IMUCallBack);
  35. vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);
  36. ros::spin( );
  37. return 0;
  38. }

 内容九 消息包

标准消息包

数组类型中数组长度可变

 常用消息包

 带有stamped的是数据中含有Header

 

 自定义消息包

 catkin_create_pkg qq_msgs roscpp rospy std_msgs message_generation message_runtime

更改CMake.list 文件(52行   72行 106行)

改为

  1. add_message_files(
  2. FILES
  3. Carry.msg //自己创建的msg文件
  4. )
  5. //72行
  6. ## Generate added messages and services with any dependencies listed here
  7. generate_messages(
  8. DEPENDENCIES
  9. std_msgs
  10. )
  11. //106行
  12. ## DEPENDS: system dependencies of this project that dependent projects also need
  13. catkin_package(
  14. # INCLUDE_DIRS include
  15. # LIBRARIES qq_msgs
  16. CATKIN_DEPENDS message_generation message_runtime roscpp rospy std_msgs
  17. # DEPENDS system_lib
  18. )

进入package.xml文件,补全<buildtool_depend> 与<exec_depend>,使其均含有message_runtime和message_generation

操作完成后如下图所示

  1. <buildtool_depend>catkin</buildtool_depend>
  2. <build_depend>message_generation</build_depend>
  3. <build_depend>message_runtime</build_depend>
  4. <build_depend>roscpp</build_depend>
  5. <build_depend>rospy</build_depend>
  6. <build_depend>std_msgs</build_depend>
  7. <build_export_depend>roscpp</build_export_depend>
  8. <build_export_depend>rospy</build_export_depend>
  9. <build_export_depend>std_msgs</build_export_depend>
  10. <exec_depend>message_runtime</exec_depend>
  11. <exec_depend>message_generation</exec_depend>
  12. <exec_depend>roscpp</exec_depend>
  13. <exec_depend>rospy</exec_depend>
  14. <exec_depend>std_msgs</exec_depend>

验证

robot@wp:~$ rosmsg show qq_msgs/Carry

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/491138
推荐阅读
相关标签
  

闽ICP备14008679号