Skip to content

Latest commit

 

History

History
181 lines (121 loc) · 6.23 KB

4_realrobot.md

File metadata and controls

181 lines (121 loc) · 6.23 KB

实物实验Tutorial

Table of Content

  • 连接机器人
  • 建图&定位
  • 收发消息
  • Global Planner&Local Planner
  • 其他注意事项

连接机器人

  1. 修改自己笔记本的IP地址,设为Manual,Address:192.168.1.1,Netmask:255.255.255.0,Gateway:192.168.1.1
  • 打开设置,选择“网络”
  1. 网线连接自己的笔记本和机器人,终端ssh进去,ssh成功则说明网络层面上连接机器人成功

    密码:robot123

  2. 在ssh界面修改机器人上的/etc/hosts文件,加入自己的笔记本的IP和机器名(同一个IP不能有多个机器名) (把 zdk-laptop 修改为自己的机器名)


    @前的zdk为用户名,@后的zdk-rog为机器名

    127.0.0.1      localhost
    127.0.1.1      jzrobot-x
    192.168.1.1    zdk-laptop
    
  3. 修改自己的笔记本的/etc/hosts文件,加入机器人的IP和机器名,例如

    127.0.0.1		localhost
    127.0.1.1		zdk-laptop
    192.168.1.3 	jzrobot-x
    
  4. 修改自己的笔记本的~/.bashrc文件,在最后一行加入以下命令

    export ROS_MASTER_URI=http://192.168.1.3:11311
    export ROS_IP=192.168.1.1
  5. source一下~/.bashrc文件

    $ source ~/.bashrc
  6. 在自己的笔记本查看机器人上的topic与node,如果能输出topic的信息且node的信息无报错则说明ROS层面上连接成功

    $ rostopic list  ### 查看是否列出所有topic的信息
    $ rostopic echo /rosout  ### 查看/rosout是否一直打印东西
    $ rosnode info /move_base  ### 查看最后一行有无ERROR

建图&定位

  1. 在机器人上标定IMU,在ssh的界面上输入以下命令(标定好就结束了)
$ rosrun calib_imu imu_calib
  1. 在机器人上转发激光雷达的数据,在ssh的界面上输入以下命令(这个会一直跑 ,后面需要再开个ssh)
# 注意,以下命令二选一
$ rosrun topic_tools relay /scan /scan_emma_nav_front   ### 老车
$ rosrun topic_tools relay /scan_emma_nav_front /scan   ### 新车
  1. 打开urg节点,在ssh的界面上输入以下命令 (仅老车需要)
$ rosrun urg_node urg_node
  1. 打开tf转发工具,在ssh的界面上输入以下命令(这个会一直跑,后面需要再开个ssh)
$ cd jz/catkin_ws
$ source devel/setup.bash
$ rosrun my_tf tf_broadcaster
  1. 建图,如果之前没有建过图或者建图效果太差需要重建,则完成这一步骤,否则跳过。

    首先在ssh的界面打开cartographer_occupancy_grid_node这个节点

$ rosrun cartographer_ros cartographer_occupancy_grid_node

​ 然后打开网页,在网页上操作建图(密码:admin)

  • 新建地图
  • 使用键盘WASD键控制小车移动,尽量覆盖整个场地
  • 网页上白色区域表示可行区域,黑色部分表示障碍物,红色表示激光雷达数据,注意要跟实物匹配

​ 建好之后使用map_server存储建好的地图(要在网页建图部分的打勾前保存地图)

$ rosrun map_server map_saver -f mymap map:=/map
  1. 建好图后,在网页中启动导航模式并手动定位,在ssh界面启动map_server,之后就可以通过/map 这个topic来读取地图
$ rosrun map_server map_server mymap.yaml

收发消息

仿真topic/tf 真机topic / tf 类型 作用
/map /map nav_msgs/OccupancyGrid 接收地图信息(障碍物)
/course_agv/laser/scan /scan sensor_msgs/LaserScan 接收激光雷达信息
/course_agv/velocity /webService/cmd_vel geometry_msgs/Twist 发送AGV的速度信息
/course_agv/global_path /course_agv/global_path nav_msgs/Path 发送GlobalPlanner的路径
/course_agv/goal /course_agv/goal geometry_msgs/PoseStamped 获取rviz上的target信息
/map <-> /robot_base /map <-> /base_footprint tf MAP坐标系 <-> AGV坐标系

接受数据

  • subscribe对应的topic即可

发送指令

  • 只需要往/webService/cmd_vel这个topic发送geometry_msgs/Twist即可

Global Planner&Local Planner

Global Planner

需要改的几处

  • 代码第52行的tf
改之前
self.tf.waitForTransform("/map", "/robot_base", rospy.Time(), rospy.Duration(4.0))
(self.trans,self.rot) = self.tf.lookupTransform('/map','/robot_base',rospy.Time(0))

改之后
self.tf.waitForTransform("/map", "/base_footprint", rospy.Time(), rospy.Duration(4.0))
(self.trans,self.rot) = self.tf.lookupTransform('/map','/base_footprint',rospy.Time(0))
  • 代码第32行的map subscriber
改之前
self.map_sub = rospy.Subscriber('/slam_map',OccupancyGrid,self.mapCallback)

改之后
self.map_sub = rospy.Subscriber('/map',OccupancyGrid,self.mapCallback)
  • import自己的AStarPlanner,初始化AStarPlanner,调用plan函数进行路径规划

Local Planner

  • Local Planner由Global Planner触发,即Local Planner监听Global Planner生成的全局路径(通过ROS的订阅topic机制实现)。

  • 在获取全局路径后,Local PLanner结合全局路径、机器人当前位姿与地图,调用DWA,生成线速度与角速度,最后将该指令通过发布/webService/cmd_vel控制机器人移动。

  • 上述步骤按照固定频率循环执行。

其他注意事项

  • 机器人速度不能超过0.2m/s,不然容易出事:warning:

  • 注意观察机器人左上角的急停按钮,发生突发情况可以按急停按钮