拆开快递箱,映入眼帘是一个行李箱,拆开行李箱后取出铁蛋:

一,开箱

行李箱+铁蛋

铁蛋+配件:

包含一个充电器,一根typec数据线,四个备用脚垫,铁蛋的专属铭牌

二,查看生产环境

拿到手后,可能大家第一件事是充电并连接手机。而我就不一样了,作为一名开发人员,非常好奇铁蛋的生产环境是什么样的。于是直接开机连接显示器,查看生产环境,连接显示器后首先映入眼帘的是lubuntu的操作界面:

 

但是使用扩展坞连接键盘鼠标这样控制总是很麻烦,使用远程连接更方便,于是第二件事肯定是安装远程桌面软件。连接wifi,在路由器或者终端查看ip(192.168.31.254),连接上wifi之后就可以通过ssh远程访问了。在终端发现系统用户名是mi,于是远程ssh访问:

ssh mi@192.168.31.254

这时问题来了,密码是什么??不急,一般密码都很简单,或者是特殊字符,于是一个个试:

mi 不对

cyberdog 不对

xiaomi 不对

123456 不对

admin123 不对

什么!!都不对,那怎么办啊,又想急着测试,总不能整个密码字典进行强制破解吧。突然想到代码开源在了gitlab,于是去gitlab的README查看,可是主项目的README仔仔细细看了几遍,也没发现啊。突然想到一朋友也申请到了铁蛋,去问问他。他告诉我密码是123,在README上写的有.....折腾了半天终于破案了,原来密码是123,并且那个写在了子项目的README。好在现在项目迁移到github后,用户名及密码写在了README最显眼的位置。

知道了密码,就可以安装三方远程桌面软件了。我这里使用的是NoMachine,一款很好用的远程桌面软件,使用scp 复制到铁蛋上:

scp nomachine_6.9.2_1_arm64.deb mi@192.168.31.254:~

在铁蛋终端上使用以下命令安装:

sudo dpkg -i nomachine_6.9.2_1_arm64.deb

安装成功后就能在nomachine客户端上连接远程桌面啦(会自动扫描到或者手动填入Ip连接即可):

 

连接上桌面,进入系统的home目录,发现并没有熟悉的ROS的工作空间,那就看看source的环境变量:

cat  ~/.bashrc

 

发现source的是mi_config中的/opt/ros2/cyberdog:

 

原来编译出来的二进制文件和ROS一样放在了opt目录:

 

三,手机连接铁蛋

大概熟悉了生产环境,但是目前铁蛋还是趴在地上,目前在铁蛋本体上也没有一些可视化的软件去控制铁蛋。于是接下来就开始尝试使用手机连接,但是我这边使用的主力机是苹果手机,有个三四年前的魅族7s备用机。众测说明上说是APP只支持部分小米手机,但是心想都是安卓手机,而且都是apk安装包,支持性应该不会太差。于是抱着试一试的态度下载了apk,并在手机上进行安装,成功安装,接着打开APP:

点击开始连接成功搜索到蓝牙,连接蓝牙:

 

接着连接wifi,由于刚才我已经连接显示器手动进行连接wifi了,这里直接点击刚才的wifi即可,特别的铁蛋必须接入互联网才能使用(小爱语音需要联网使用),即在户外时需要连接个人热点(需要和手机建立wifi连接,手机才能通过grpc控制铁蛋):

接着就是主界面:

室内模式需要创建地图,按照提示进行创建:

创建地图时可以设置一些点位信息,如休息点等等,但是APP对我的手机支持貌似不太好,在点位编辑时很难点击到重命名,创建完地图后室内模式就是如下界面:

同时可以点击地图上的点位或者位置进行室内导航,另外就是关于设置界面的一些其他简单设置:

由于截至目前也没有抽出空去室外测试,所以这里室外测试的话就先略过。

四,二次开发

我这边铁蛋主要就是用来做二次开发,因此着重尝试了下二次开发。二次开发最重要的一步莫过于开发环境的搭建,但是由于目前二次开发的资料过少,于是只能先手动的去尝试搭建开发环境。

1,寻找相关资料

首先是查看README相关的说明,看看有没有一些有用的资料,只是发现了一些依赖库,特别的,在源代码的tools目录发现有docker相关的DockerFile:

研读DockerFile,发现有相关build_tools的文件拉取,也许后面会通过docker的形式来帮助大家构建开发环境的打算?

我这边也对DockerFile进行build,amd64版本的DockerFile是能够成功被构建的,但是aarch64位版本的DockerFile构建会报错。由于docker也没有相关的文档说明怎么去构建,在将镜像构建完成之后就没有再去尝试了。

2,尝试手动搭建开发环境

于是接下来就尝试手动去搭建开发环境,首先是安装ubuntu20.0虚拟机,虚拟机安装完成后安装ROS Foxy,并source ROS环境变量,接着根据README提升去一一编译安装依赖库:

但是也没有明确说明依赖库的版本号,仅凭这些去盲目安装的话,总感觉后面编译时会出错,但是我这边也一个不差的将依赖库网上寻找并下载下来。并且都成功的进行了make install:

 

之后进行编译:

编译最小包:

colcon build --merge-install --packages-up-to cyberdog_bringup

很庆幸,编译通过了:

于是尝试编译整包:

colcon build --merge-install

不出意外的编译报错了,失败在cyberdog_version上:

具体原因也没有去深入查,测评时间有限,暂时先放一边

3,在铁蛋本体上进行二次开发教程

自己尝试搭建开发环境无果后,于是开始尝试在铁蛋本体上进行搭建开发环境,因为生产环境是具备一些运行环境的,进行开发应该问题不大。但是值得一提的是,在真实开发的过程中尽量避免用生产环境,因为开发过程中可能导致生产环境发生改变,从而导致环境破坏,不能正常运行本体程序。

这里在尝试前首先需要备份原有程序包,这非常重要!如果没有备份而直接进行程序更新,可能导致不可逆的问题!!

备份命令如下:

cp -R /opt/ros2/cyberdog ~/cyberdog-0922

这里是将程序包备份到home目录,备份到opt目录可能会有权限问题

 

接下来就是克隆代码(按照git教程):

$ mkdir -p ros_apps/src

$ cd ros_apps/src

$ git clone https://github.com/MiRoboticsLab/cyberdog_ros2.git

$ cd ..

编译所有的包:

colcon build --merge-install

编译过程中会遇到cuda的报错,执行以下命令安装包即可:

sudo apt-get install cuda-toolkit-10-2

整包编译成功:

但是此时构建生成的二进制文件是存放在build目录下的,如果想要拷贝到/opt目录则安装github上说明执行以下命令再进行编译:

$ export OUTPUT_DIR=/opt/ros2/cyberdog

$ colcon build --merge-install --install-base $OUTPUT_DIR

 

如果遇到编译报权限不足的错误,我这里执行以下命令修改权限:

sudo chmod -R 777 /opt/ros2/cyberdog

如果感觉改为777权限不太稳妥,也可以修改所属组

sudo chown -R mi:mi /opt/ros2/cyberdog

执行成功,重启铁蛋:

sudo systemctl restart cyberdog_ros2.service

我这里选择的是断电重启,重启后测试基本功能均正常,并未深度测试是否有其他的一些问题,其中有一个问题是在铁蛋本体打开终端souce时会报local_setup.bash文件不存在:

进入目录,发现bash文件确实不存在:

但是值得注意的是在老的备份包中根本不存在这些文件夹:

可能是git上的代码对某些sh文件进行调整,并且目前也并未发现其他异常,这个问题先忽略。

到这里基于铁蛋的二次开发教程就介绍完成了

这里介绍一款vscode上的插件(remoteSSH):

可以在windows电脑上通过ssh远程访问铁蛋的本体代码文件,并远程开发,安装教程也非常简单vscode应用商店搜索安装:

安装后点击左侧的图标(我这里已经安装过):

点击+号并输入ssh命令(ip改为自己铁蛋ip)并回车

接着点击文档按钮(我这里已经添加过):

在新code窗口输入密码:

即可成功连接:

选择打开文件夹,打开刚刚克隆的代码地址:

确定即可进行远程开发,本机做的更改都会同步到远程:

同时也可以打开远程终端进行编译:

 

4,二次开发环境搭建总结

目前我这边尝试二次开发环境搭建主要遇到的一个问题就是资料过少,不知如何搭建开发环境(相信后面铁蛋相关开发人员会将相关资料逐步进行完善)。目前在铁蛋本体上直接进行二次开发是没有问题的,但是在生产环境上做二次开发是有风险的,容易将生产环境搞坏,因此后期的话还是需要自行搭建开发环境,通过交叉编译的方式进行部署。

五,不足与缺陷

1, 固件版本电量冲饱后,如果没有断开电源,则会反复提醒进入充电状态,冲饱后又提醒充电结束,更新固件后,在目前版本中貌似修复了(20210824)。

2, 室内建图功能需要优化,在切换场景时容易导致地图重叠

3, 目前的铁蛋作为电子宠物而言,并不智能,距离产品化还有一定的差距。铁蛋目前脱离不了手机控制,在手机断开连接后铁蛋会自动卧倒。

4,手机APP偶尔会出现铁蛋断连,且只能重启铁蛋进行恢复

5, 铁蛋站立时强制按关机键进行关机时铁蛋会立马趴下,造成磕伤,是否可以增加相关防护或者软关机功能(目前手机断开连接铁蛋会自动趴下)。

6,续航有点短,充电两小时使用1小时

六,未来二次开发方向

1, 加入自动充电功能

不知道铁蛋官方后期是否有自动充电功能开发的打算,实现一个智能宠物的话,智能回冲功能还是非常有必要的。我这边是有后期开发自动充电的打算,目前想到的一个方案就是通过无线充电的方式,在铁蛋腹部增加无线充电线圈进行自动回冲。

接入三方手柄

目前还不支持手柄,APP有接入手柄的功能,但是固件也是只能支持官方手柄。ROS是有提供joystick-drive功能包,以支持三方手柄,目前手头有xbox手柄一个,后期考虑二次开发接入自己手柄。