<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title></title>
    <description>Let's build robots powered by SoTA Neural Networks and Reinforcement Learning.</description>
    <link>https://www.gooddog.ai//</link>
    <atom:link href="https://www.gooddog.ai//feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 27 Dec 2022 21:39:00 +0000</pubDate>
    <lastBuildDate>Tue, 27 Dec 2022 21:39:00 +0000</lastBuildDate>
    <generator>Jekyll v3.9.2</generator>
    
      <item>
        <title>New Code Repo</title>
        <description>&lt;p&gt;Recently, we’ve had the chance to rewrite the bot code. Over time, it had become progressively more
and more difficult to work with the old ROS codebase. It was bad to have the realtime code
and the training code be in two different repos (hard to sync the vector spaces when the code is in two places and
in two different languages). Finally, adding more training data was more likely to cause weird NaN errors rather than
improve robot performance.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/GoodDogAI/robotai&quot;&gt;RobotAI on Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are some nice new features based on learnings in the rewrite:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/commaai/cereal&quot;&gt;Cereal&lt;/a&gt; message system, based on Capnproto, from CommaAI.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GoodDogAI/robotai/tree/main/src/msgvec&quot;&gt;MsgVec&lt;/a&gt; - There is one C++ class which is responsible for interfacing messages and vectors.
    &lt;ul&gt;
      &lt;li&gt;It takes a stream of input messages, and creates a float vector for feeding into an ONNX graph.&lt;/li&gt;
      &lt;li&gt;It takes an action vector from your RL output, and converts it back to messages to send out and control your robot.&lt;/li&gt;
      &lt;li&gt;It works the same whether you are feeding live messages, or replaying a log&lt;/li&gt;
      &lt;li&gt;Cython bindings so you can use the code in python&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Companion web service
    &lt;ul&gt;
      &lt;li&gt;Automatically upload log files after the robot runs&lt;/li&gt;
      &lt;li&gt;Automatically download ONNX files, convert to TensorRT, validate results match between host and device&lt;/li&gt;
      &lt;li&gt;Download and view logs and metadata&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;On-device video compression, based on NVIDIA libraries, allows for higher res recordings and saving space.&lt;/li&gt;
  &lt;li&gt;Unit test all the things, the new code is quite paranoid about making sure the inputs and outputs match between
training and runtime. Any weirdnesses raise exceptions so that you can debug, rather than live with silent failures.&lt;/li&gt;
  &lt;li&gt;SAC reinforcement learning based on &lt;a href=&quot;https://stable-baselines3.readthedocs.io/en/master/&quot;&gt;Stable Baselines 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Vision model based on &lt;a href=&quot;https://github.com/WongKinYiu/yolov7&quot;&gt;YoloV7&lt;/a&gt; with no modifications&lt;/li&gt;
  &lt;li&gt;Reward calculations are a seperate, fully contained ONNX graph&lt;/li&gt;
  &lt;li&gt;Better config and caching to keep iteration-speeed fast&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Wed, 02 Nov 2022 15:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/new-repo.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/new-repo.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Basic Obstacle Avoidance</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/U3l0QFgbJzU&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Here we see our little GoodDog, automatically avoiding an obstacle. 
I’ll be honest, this only works fully about 25% of the time, the other 25% of the time it may move towards a direction
which could potentially avoid a collision, and the rest of the time it will just fail to avoid it.&lt;/p&gt;

&lt;p&gt;However, still impressive, as this is purely end-to-end trained on around 6 hours of real-world robot data. The
reward function gives a reward signal when detectable objects (from a YOLOv5 network) are in view, with a bonus
for looking at humans. Additionally, as the human, you are able to press a button on your phone when the robot is
training, to send an additional reward or punishment signal. We often do this when the robot has gotten
stuck on a chair or corner.&lt;/p&gt;

&lt;p&gt;(Video from Feb 2nd, using the usual-paper-495 checkpoint)&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Feb 2022 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/obstacle-avoidance.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/obstacle-avoidance.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Charging Station</title>
        <description>&lt;figure&gt;
    &lt;img src=&quot;https://www.gooddog.ai//images/charging_dock.jpg&quot; /&gt;
    &lt;figcaption&gt;Bumble testing out his new charging dock&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We’ve built a new charging dock for the robot, with Taras H’s help!&lt;/p&gt;

&lt;p&gt;The internals are pretty simple, it’s just a container for a standard
4S LifePo4 battery charger, plus some spring contacts and plates added
to the underside of the robot.&lt;/p&gt;

&lt;p&gt;The next plan is to modify the robot’s reward function to reward finding its charging dock
when its battery is low, and then getting it to dock itself.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;https://www.gooddog.ai//images/charging_dock_design.png&quot; /&gt;
    &lt;figcaption&gt;Charging dock Fusion 360 models&lt;/figcaption&gt;
&lt;/figure&gt;
</description>
        <pubDate>Sun, 16 Jan 2022 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/charging-station.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/charging-station.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>GoodDog Bumble v0.2</title>
        <description>&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/RptVgsv7DTc&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;We just got the Bumble v0.2 operational, especially big thanks to Taras H. for the mechanical design here!&lt;/p&gt;

&lt;p&gt;As you see in the video, the motion of the bot, especially the head, is extremely smooth. We decided to drop
the Dynamixel servos that were in &lt;a href=&quot;https://www.gooddog.ai/bumble/&quot;&gt;version 0.1&lt;/a&gt;, and go instead for Brushless Gimbal
Motors that you’d typically find stabilizing the camera on a drone.&lt;/p&gt;

&lt;p&gt;In real life, it’s almost surreal watching the robot operate at this speed. The head just moves extremely smoothly, and 
completely silently. The main drive motors are also extremely quiet. This means that the robot should end up extremely low 
maintenance, and will stand up to lots of repetitive motions without any degradation.&lt;/p&gt;

&lt;p&gt;It’s unfortunately not a cheap robot, but the total BOM cost is just under $2,000 USD (The most expensive part is the Jetson AGX Xavier dev kit).
The cost of a comparable robot is probably in the $5k-$10k range from something like a Segway platform .
A GoodDog Bumble is something that you can build with just basic tools, and a generic 3D printer.&lt;/p&gt;

&lt;p&gt;All of the mechanical design files, 3D printing files, and provisioning instructions are available below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gooddog.ai/bumble/assembly&quot;&gt;Mechanical Assembly Instructions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gooddog.ai/bumble/xavier-provisioning&quot;&gt;Jetson Xavier Provisioning&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.gooddog.ai/bumble/gimbal-electronics&quot;&gt;Brushless Gimbal Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 19 Nov 2021 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/bumble0_2.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/bumble0_2.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Open Sourcing</title>
        <description>&lt;p&gt;The code for GoodDog.ai is now fully open source.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/GoodDogAI/rossac&quot;&gt;rossac - SAC training from ROS Bag files&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/GoodDogAI/bumble&quot;&gt;bumble - Run ONNX models in ROS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Project Log:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Ability to have an arbitrary length history buffer to allow the RL network to have ability to see events in the past.&lt;/li&gt;
  &lt;li&gt;Currently trying just last 4 to 10 entries (a few seconds) worth of history, but some RNNs are possible with this approac&lt;/li&gt;
  &lt;li&gt;New YoloV5 checkpoints with higher accuracy, and fewer custom steps needed to update&lt;/li&gt;
  &lt;li&gt;Ability to inference YOLO’s ONNX export on GPU when doing offline training&lt;/li&gt;
  &lt;li&gt;Progress on “rewardbutton” bluetooth connection plus Android app&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Fri, 24 Sep 2021 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/oss.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/oss.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Robot following indoors</title>
        <description>&lt;p&gt;Here’s a small video of our latest checkpoint. We’ve previously run into problems where the robot would learn 
some very limited behaviors within one training checkpoint. Ex. you’d train a single checkpoint, and it’s behavior
would collapse so it would only drive backwards, or only turn left, or only follow a human within an outdoor
environment (with fewer cluttered objects). This checkpoint (sac-peachy-resonance-379-21504), is the first to have 
a variety of behavior depending on the situation.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Xlq6a826RhU&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Project Log:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Reduced everything down to 2Hz update rate, so that we don’t rattle the pan-tilt module to pieces.&lt;/li&gt;
  &lt;li&gt;Fixed bug with dropout being too high in training. (Now we can set dropout for different parts of the observation space independently.)&lt;/li&gt;
  &lt;li&gt;Discovered some LR schedules and rates which help prevent Q function collapse.&lt;/li&gt;
  &lt;li&gt;Up next: Being able to pass an N-element observation history to the network, so it can start to gain a memory.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 24 Aug 2021 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/robot-following-indoors.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/robot-following-indoors.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Following humans</title>
        <description>&lt;p&gt;In this video, the robot has learned to keep a human “in-frame” by turning the wheels left and right.
As I move to the left and right, it will slowly turn the motors to keep me centered. This behavior is fully
trained in an end-to-end manner. The camera input goes to a pre-trained vanilla YoloV5s network,
and one of the penultimate layers is then fed into a small MLP network trained with SAC to predict motor speeds and pan-tilt
angles on the head.&lt;/p&gt;

&lt;p&gt;One thing we saw was that the training data all came from the backyard, when running the same checkpoint indoors, the robot
basically sits still, or rotates in place without much activity. But, if you take it outside back to where it was trained,
the variety of behaviors increases dramatically.&lt;/p&gt;

&lt;p&gt;Another downside, is that the left/right motion does not occur in all orientations or parts of the backyard, it can be location dependent.&lt;/p&gt;

&lt;p&gt;Running the sac-amber-snow-284-05632 checkpoint.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/S2sX_xu_PEI&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Project Log:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Fixed bug with calculating the reward function from Yolo intermediate frame.&lt;/li&gt;
  &lt;li&gt;Sped up training with keeping the replay buffer on the GPU.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next up:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Can we train in a “small-offset” simulator?&lt;/li&gt;
  &lt;li&gt;Continue training same checkpoint, potentially with newer bag files&lt;/li&gt;
  &lt;li&gt;Fix bugs with bag recording and message sending reliability&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 02 Aug 2021 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/following-humans.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/following-humans.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Exploring the lawn</title>
        <description>&lt;p&gt;Just a shot of the robot exploring the lawn. Running the sac-13200-bs2048-dropout0.88-normalized_env_newbags checkpoint.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/hao7AC0BL9k&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Project Log:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Identified and fixed NaNs and large values in the observation/reward buffer&lt;/li&gt;
  &lt;li&gt;Identified throttling issue with bag recording, even with reduced camera framerates&lt;/li&gt;
  &lt;li&gt;Partial success testing the bluetooth reward/penalty button, decided to move to a phone-app based design.&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 23 Jul 2021 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/exploring-the-lawn.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/exploring-the-lawn.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Introducing GoodDog.ai</title>
        <description>&lt;p&gt;Very little work in our field of deep learning has been focused on the practical objective of building a synthetic 
animal-like consciousness. This lack of effort holds us back from achieving empathetic robots that can interact
with their physical and social environments like animals do and thus holds us back from having empathy towards
these synthetic entities ourselves. Imagine how nice it would be to have a pet “robot” who could give you the 
attention and love that a puppy or kitten could, all the while knowing that any attention you give it will be
rewarded with real growth and learning for both of you.&lt;/p&gt;

&lt;p&gt;Despite all the hype around machine learning, and all the results achieved by deep neural networks like GPT-3 and 
others, why hasn’t anyone worked on this? There has been extensive focus on dry, statistical approaches to text,
image, and video understanding. These deep neural networks have now surpassed human ability in many subtasks of
daily life, such as object recognition, video segmentation, depth perception, and language skills.
But no project has been able to combine these available pieces into an agent that’s as flexible or enjoyable
to spend time with as even a pet rodent.&lt;/p&gt;

&lt;p&gt;I predict that simple reinforcement learning algorithms, trained with input from the final hidden layers of
state-of-the-art perception networks, can achieve rich and complex objectives in the physical world. 
We know it will not be easy to design the proper reward functions, to gather the vast amount of needed training data,
or to more deeply explore this promising space. However, we think that this path represents the most promising one
yet towards creating synthetic conscious entities with empathy for the common person.&lt;/p&gt;

&lt;p&gt;It is time that we connect the amazing perceptual abilities of networks such as Yolo and EfficientNet to a physical
representation in the real world. Let’s build a robot that combines a state of the art vision network (YoloV5) as 
the basic input for reinforcement learning (SAC) that can optimize for the objective of exploring and interacting
with the real world.&lt;/p&gt;

&lt;p&gt;In this light, we are launching &lt;a href=&quot;GoodDog.ai&quot;&gt;GoodDog.ai&lt;/a&gt;, an open project whose aim it will be to use the
latest state of the art  in machine learning to create a mobile robot capable of passing the Puppy Turing Test.
Namely, we are building a 
synthetic entity capable of interacting with its surroundings in a way to evoke sustained empathy from humans.
The chief theory behind this project will be to take state of the art perceptual neural networks, run them in real 
time on inexpensive mobile robots, and then train reinforcement learning algorithms on the final perceptual
layers of these neural nets.&lt;/p&gt;

&lt;p&gt;Stay tuned for more information on our published robot designs, BOMs, and software stack.&lt;/p&gt;
</description>
        <pubDate>Tue, 20 Jul 2021 21:03:00 +0000</pubDate>
        <link>https://www.gooddog.ai//update/project-intro.html</link>
        <guid isPermaLink="true">https://www.gooddog.ai//update/project-intro.html</guid>
        
        
        <category>update</category>
        
      </item>
    
  </channel>
</rss>
