惟愿言行合一,砥砺前行

0%

ROS|④Turtlebot3汉堡Burger连接和远程控制

机器人连接和远程控制

准备

充电

  • 充电有两种方式:

    ①直接供电:电源适配器连接树莓派上的圆孔;

    ②电池供电:电源适配器插到蓝色的那个充电器,再将充电器与Burger底座的电池相连接。(当电池电量低于11V时,电池会发出持续的警报声,而且部分控件无法工作,此时应该将电池充电。)

    当机器人不需要挪动,即调试阶段时,建议采取直接供电的方式。

    直接供电真挺方便的,电池供电那个蓝色的充电器好难拔下来……

连接显示屏

  • 然后HDMI的插孔在USB插孔旁边,USB插孔在树莓派上面那一层。

    那一排USB之后还可以接鼠标键盘等。

  • 显示器的HDMI插孔可能在机子后边,多看看多找找,插得上的就是了。

  • 然后,给显示器供电。先插线,再打开Burger开关!(开关在树莓派上),然后显示器就会有信号输入。

联网

将Burger和主机连到同一个局域网中。

  • 主机连WiFi不用多说。
  • Burger连WiFi是在显示屏上面操作,和主机连WiFi没啥区别。
问题 解决办法
为啥要连同一个WiFi? 答:ROS系统在使用过程中,移动机器人需要访问并传递信息到远程电脑建立的程序核心服务器(roscore),信息不经过互联网,所以只能在局域网中进行连接。
Ubuntu虚拟机连不上WiFi 1. 虚拟机-设置-网络适配器,选择桥接模式。
2. 编辑-虚拟网络编辑器-更改设置,在桥接的那个网卡中,把WiFi网卡改成自己的网卡。(真机上查看网络属性有网卡名字)
真机连不上WiFi ①连上了,只是上不了网。不行就算了,没必要有网。真想有就登录路由器管理界面(路由器盒子底下的网址),多设置设置,看看路由器是否可以连上别的网。
②连不上。看看有没有对应的WiFi名称。如果连WiFi名字都搜不到,考虑重启路由器,还是不行就把路由器恢复出厂设置,再不行就看看别人搜得到吗,都不行就换个路由器……
小车连不上WiFi wlan0是无线网卡,eth0是有线网卡。以下仅针对无线连接。
1. 如果连接成功,但是WiFi频繁闪烁:ifconfig检查wlan0网卡的IP地址是否正常。如果IP地址是115之类的奇怪数字,说明dhcp自动获取IP有问题。一般是因为树莓派的网卡设置有误。
解决方案:尝试用网线有线连接小车。或尝试手动获取IP地址。
2. 如果无法自动获取IP地址:
解决方案1:修改dhcpcd.conf:sudo nano /etc/dhcpd.conf
滑到最底端,删除曾连接过的wifi名称和密码。
ctrl+o保存,ctrl+x退出,sudo reboot重启(或者手动重启),然后再次连接网络即可。
解决方案2:sudo dhclient -d wlan0 #删除dhcp获取的ip
sudo dhclient wlan0 -v #dhcp自动获取ip

如何丢掉显示屏

方法一:ssh连接

优点:稳定;缺点:命令行操作,不好看。

ssh -Y【Burger的用户名】@【Burger的IP】

  1. 首先需要检查【主机】和【Burger】的 IP 地址。
    打开终端,在终端中输入 ifconfig。

    如果你不希望之后频繁更改配置,你可以为Burger分配静态IP。

  2. 记住【Burger的IP】、【Burger的用户名】、【主机IP】。

  3. 主机中输入ssh -Y【Burger的用户名】@【Burger的IP】(这里是pi@192.168.1.133)

    -Y参数可以让你之后能直接在主机上gedit小车的.bashrc文件。如果不加这个参数,你可以使用nano编辑文件。(比如sudo nano ~/.bashrc)

  4. 输入密码(默认turtlebot,不排除有人二次改动),连接成功。

方案二:远程桌面连接mstsc

优点:好看;缺点:连接时不稳定。

  1. 在小车中安装xrdp服务:
1
pi@raspberrypi:~ $ sudo apt-get install xrdp
  1. 打开win电脑的远程桌面:win+r,输入mstsc,回车,输入ip,回车。
  2. 输入账号密码,连接成功,显示桌面。

网络配置

  1. 【主机】、【Burger】的终端中运行:

    gedit ~/.bashrc。

  2. 在.bashrc中追加(或修改)(注意空格):

    【主机】:

    export ROS_MASTER_URI=http://【主机 IP】:11311
    export ROS_HOSTNAME=【主机 IP】
    export TURTLEBOT3_MODEL=burger

    【Burger】:
    export ROS_MASTER_URI=http://【主机 IP】:11311
    export ROS_HOSTNAME=【Burger的IP】

  3. 重启终端或者source ~/.bashrc,重新ssh连接。

  4. 解释:export TURTLEBOT3_MODEL=burger是为了在后续可视化操作中调用正确的三维模型【burger】。

  5. 显示器可以关了,之后的操作直接在主机上就能完成。

下载各种依赖包

请直接复制粘贴表格内容,如果遇到错误,请直接查看最右侧解决方案。

下载完成的跳过这一步。如果报错,不要忘了回到这一步来看看喔!

依赖包 安装过程 安装报错时的解决方案
Turtlebot3的包 mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://hub.fastgit.org/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://hub.fastgit.org/ROBOTIS-GIT/turtlebot3.git
git clone https://hub.fastgit.org/ROBOTIS-GIT/hls_lfcd_lds_driver.git
cd ~/catkin_ws && catkin_make
sudo echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc
问题解决方案1————-catkin_make编译时候的各种问题汇总
roslaunch、使用rviz的时候需要的依赖包 sudo apt update
sudo apt-get install ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control ros-noetic-robot-state-publisher ros-noetic-gmapping ros-noetic-rviz ros-noetic-joy ros-noetic-teleop-twist-joy ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc ros-noetic-rgbd-launch ros-noetic-rosserial-arduino ros-noetic-rosserial-python ros-noetic-rosserial-client ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro ros-noetic-compressed-image-transport ros-noetic-rqt-image-view ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers libasound2-dev
先更新源,然后报啥错就下啥包。(其中noetic更换为自己的ros版本。)

控制的流程

控制之前可以重启小车,因为刚刚准备工作运行了太多内容。

roscore检测网络配置是否正确

  1. 预期结果:【主机】、【Burger】都显示连接到【主机IP】。

  2. 异常情况:

    • 【主机】的IP值不对:按照配置Burger和主机的网络重新配置网络配置。

    • 【Burger】的IP值不对:

      • 如果显示器还开着,就按照配置Burger和主机的网络重新配置网络配置。

      • 如果显示器已经关掉了,却直接gedit ~/.bashrc,可能会显示连接不上。

        为了方便起见,我们在ssh连接后,直接在终端运行

        export ROS_MASTER_URI = http://【主机 IP】:11311
        export ROS_HOSTNAME = 【Burger的IP】

        从而可以直接改变小车对应的MASTER_URI。

        也可以把ssh连接的指令换成ssh -Y 用户名@IP,这样就能打开gedit了。

运行远程控制程序包

  1. 【Burger】:roslaunch turtlebot3_bringup turtlebot3_robot.launch

    解释:在机器人桌面终端调用Turtlebot3 应用程序。

  2. 【主机】:roslaunch turtlebot3_bringup turtlebot3_remote.launch

    解释:启动Turtlebot远程应用。

  3. 【主机】:rosrun rviz rviz -d `rospack find turtlebot3_description`/rviz/model.rviz

    解释:启动Rviz。

  4. 【主机】:roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

    解释:运行无线操作依赖包中的键盘驱动程序。

  5. 在4中的终端中按w/a/s/d/x键就能用键盘远程控制小车。

order.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# 主机的准备工作:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
#github国内有时候访问不上,可使用hub.fastgit.org镜像
#git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
#git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
#git clone https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver.git
git clone https://hub.fastgit.org/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://hub.fastgit.org/ROBOTIS-GIT/turtlebot3.git
git clone https://hub.fastgit.org/ROBOTIS-GIT/hls_lfcd_lds_driver.git

cd ~/catkin_ws && catkin_make
# 参考https://www.codenong.com/cs88087849/
sudo apt-get install ros-noetic-robot-state-publisher
sudo apt-get install ros-noetic-gmapping ros-noetic-rviz
sudo apt-get install ros-noetic-joy ros-noetic-teleop-twist-joy ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc ros-noetic-rgbd-launch ros-noetic-rosserial-arduino ros-noetic-rosserial-python ros-noetic-rosserial-client ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro ros-noetic-compressed-image-transport ros-noetic-rqt-image-view ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers

# 显示屏上:
ifconfig
# 记住【Burger的IP】192.168.1.133
# gedit ~/.bashrc
# 追加export ROS_MASTER_URI=http://【主机 IP】:11311
# 追加export ROS_HOSTNAME=【Burger的IP】
# source ~/.bashrc

# 主机终端A:
ifconfig
# 记住【主机IP】192.168.1.105
gedit ~/.bashrc
# 追加export ROS_MASTER_URI=http://【主机 IP】:11311
# 追加export ROS_HOSTNAME=【主机 IP】
# 追加export TURTLEBOT3_MODEL=burger
# 追加source ~/catkin_ws/devel/setup.bash
source ~/.bashrc
# roscore检查主机地址设置是否正确

# 主机终端B:
ssh -Y pi@【Burger的IP】
gedit ~/.bashrc
# 追加export ROS_MASTER_URI=http://【主机 IP】:11311
# 追加export ROS_HOSTNAME=【Burger的IP】
source ~/.bashrc
roscore

# 主机终端C:
ssh -Y pi@【Burger的IP】
roslaunch turtlebot3_bringup turtlebot3_robot.launch

# 主机终端D:
# roslaunch turtlebot3_bringup turtlebot3_remote.launch
rosrun rviz rviz -d `rospack find turtlebot3_description`/rviz/model.rviz
# 上一条注:开启仿真模拟rviz

# 主机终端E:
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
# 上一条注:用wasd控制,可以看到rviz上的车也有动静;
# rviz:红色的是雷达检测的障碍物