Faits :
A.
Par jugement du 16 juillet 2019, le Tribunal correctionnel de l'arrondissement de la Broye et du Nord vaudois a condamné A._ pour mise en danger de la vie d'autrui, tentative de menaces, violation de domicile, contrainte sexuelle, viol, tentative de viol, infraction à la loi fédérale sur les armes, les accessoires d'armes et les munitions et contravention à la loi fédérale sur les stupéfiants à une peine privative de liberté de 3 ans, dont 24 mois avec sursis pendant 4 ans. Il a également ordonné que A._ se soumette à une obligation de suivi psychothérapeutique et à l'interdiction d'acquérir des armes de quelque nature que ce soit à titre de règles de conduite, l'a condamné à une amende de 400 fr. et a constaté qu'il avait été détenu pendant 19 jours dans des conditions illicites et a ordonné que 10 jours de détention supplémentaires soient déduits de la peine privative de liberté prononcée. Enfin, le tribunal a ordonné le maintien des mesures de substitution pour des motifs de sûreté jusqu'à l'entrée en force des règles de conduite, a ordonné la confiscation et la destruction de divers armes et objets et a dit que A._ devait immédiat paiement à B._ d'un montant de 6'000 fr. avec intérêt à 5% l'an dès le 1er mai 2017 à titre d'indemnité pour tort moral.
B.
Par jugement du 13 décembre 2019, la Cour d'appel pénale du Tribunal cantonal vaudois a rejeté l'appel de A._ et a admis l'appel joint de B._. Elle a réformé le jugement précité en ce sens que A._ doit payer à B._ un montant de 8'000 fr. à titre d'indemnité pour tort moral. Elle a confirmé le jugement pour le surplus.
La cour cantonale a retenu les faits suivants s'agissant des infractions encore contestées devant le Tribunal fédéral.
B.a. Né en 1984 à D._, A._ a entretenu une relation amoureuse avec B._ entre 2010 et début 2018. Cette relation a été ponctuée de plusieurs ruptures. Le couple n'a jamais vécu sous le même toit, mais a eu une fille, née en 2013, qui vit avec sa mère. La rente AI du prévenu inclut le montant d'une rente pour cet enfant, qui est versée directement à la mère. Aucune inscription ne figure au casier judiciaire de A._.
B.b. En cours d'instruction, A._ a été soumis à une expertise psychiatrique. Selon un rapport du 19 décembre 2018, celui-ci souffre d'un trouble mixte de la personnalité grave, avec traits émotionnellement labiles de type borderline, paranoïaques et dyssociaux, ainsi que d'un syndrome de dépendance au cannabis, alors abstinent en milieu protégé. Selon l'expert, le prévenu ne présentait pas de diminution de la responsabilité, hormis une légère diminution de sa faculté à se déterminer d'après son appréciation du caractère illicite de ses actes en ce qui concerne les événements du 7 juin 2018 (cas 4 de l'acte d'accusation), en raison d'un débordement émotionnel et d'un état d'ébriété. Le risque de récidive était élevé pour des actes de même nature. Afin de diminuer ce risque, il était nécessaire que le prévenu poursuive son travail psychothérapeutique. Il n'y avait cependant pas d'intérêt à imposer un tel suivi au prévenu et le faire pourrait même en diminuer l'efficacité. Le traitement ambulatoire ne serait pas entravé et ses chances de succès ne seraient pas notablement amoindries par l'exécution d'une peine privative de liberté. Les actes punissables commis par le prévenu n'étaient pas à mettre en lien avec son addiction au cannabis.
B.c. A E._, au domicile de B._, en 2016, ensuite d'une altercation, A._ a étranglé son amie, l'empêchant de respirer, la faisant vomir et lui causant des marques.
B.d. A E._, au domicile de B._, en avril 2017, alors que le couple s'était séparé, A._ s'est introduit de nuit dans l'appartement de l'intéressée, qui avait oublié de verrouiller sa porte d'entrée. Le prévenu s'est déshabillé, s'est rendu dans la chambre de cette dernière, qui dormait couchée sur le dos, a enlevé le duvet, lui a mis une main sur la bouche, lui a enlevé le bas de sa tenue, lui a écarté les jambes de force et l'a pénétrée vaginalement, tout en lui tenant les deux mains de chaque côté de la tête, ainsi que les cheveux. Il a fait des va-et-vient dans le vagin de B._ jusqu'à éjaculation. Cette dernière s'est débattue, a hurlé pendant l'acte et lui a demandé de la lâcher.
B.e. A E._, le 15 mars 2018, bien que séparés, A._ a passé la soirée au domicile de B._. Entre 22 et 23 heures, cette dernière s'est rendue dans sa chambre pour se préparer à aller au lit. Le prévenu l'a suivie, l'a poussée sur le lit et l'a tenue couchée par les deux poignets avec une main. B._ s'est débattue et a tenté de frapper le prévenu avec les genoux. A._ a essayé de baisser le short de celle-ci dans l'intention de la contraindre à l'acte sexuel. Comme elle se débattait, il n'y est pas parvenu. Il s'est ensuite masturbé, tout en tenant B._ d'une main. Il a éjaculé sur le haut du corps de cette dernière.
B.f. A E._, le 7 juin 2018, vers 10h45, A._ s'est rendu au domicile de B._. Ils ont bu le café en présence de C._, nouvel ami de cette dernière. Le prévenu a quitté les lieux en fin de matinée et s'est rendu en forêt. Vers 18h15, il a envoyé des photos à B._ pour lui dire qu'il s'était coupé un doigt. Vers 19h20 il lui a téléphoné pour lui dire qu'il s'était " engueulé " avec sa mère, laquelle avait refusé de l'emmener à l'hôpital. Un peu plus tard il a à nouveau téléphoné à son ex-amie pour lui demander s'il pouvait venir boire un café, ce qu'elle a refusé. Le prévenu a insisté et B._ lui a clairement fait comprendre qu'il n'était pas le bienvenu chez elle. A._ lui a dit qu'il venait quand même et il a raccroché le téléphone. Vers 19h30, il a frappé à la porte de l'appartement de B._ qui a entrouvert sa porte. Le prévenu, en colère, a alors forcé le passage et s'est introduit dans l'appartement tout en demandant à parler à C._ et tout en tenant un grand couteau dans la main droite. B._ a tenté de retenir le prévenu qui l'a repoussée et qui a brandi son couteau en direction de C._ qui se trouvait dans la cuisine, en lui disant à plusieurs reprises qu'il allait le tuer et le planter. Il s'est dirigé vers C._ en brandissant son couteau. B._ a essayé de retenir et de désarmer le prévenu. C._ s'est alors enfui et est sorti par la porte d'entrée, pendant que A._ sortait de l'appartement par la terrasse. Sur demande de B._, C._ est revenu dans l'appartement. Ils ont verrouillé les portes pour empêcher le prévenu de rentrer et ils ont fait appel à la police.
C.
A._ forme un recours en matière pénale contre le jugement du 13 décembre 2019. Il conclut, avec suite de frais et dépens, principalement, à la réforme de celui-ci en ce sens qu'il est uniquement reconnu coupable de violation de domicile, d'infraction à la loi sur les armes et de contravention à la loi sur les stupéfiants et qu'il est acquitté des chefs d'accusation de mise en danger de la vie d'autrui, de tentative de menaces, de contrainte sexuelle, de viol et de tentative de viol. Il conclut à ce qu'il soit condamné à une peine pécuniaire de 40 jours-amende à 30 fr. le jour subsidiairement à une peine privative de liberté d'une durée de trois mois et, plus subsidiairement, d'une durée modérée et compatible avec l'octroi d'un sursis total et que cette peine soit assortie du sursis pendant deux ans. Il conclut également à la suppression des règles de conduite ordonnées et à la révocation des mesures de substitution pour des motifs de sûreté, réclame 950 fr. à titre d'indemnité pour détention dans des conditions illicites, conclut à ce que tous les objets saisis qui ne sont pas des armes au sens de la loi sur les armes lui soient restitués et au rejet des prétentions civiles de B._. Subsidiairement, il conclut à l'annulation du jugement du 13 décembre 2019 et au renvoi de la cause à l'autorité inférieure pour nouvelle décision dans le sens des considérants. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.

Considérant en droit :
1.
Invoquant une violation de son droit d'être entendu, le recourant reproche à la cour cantonale de ne pas avoir donné suite à ses réquisitions de preuve tendant à l'audition de deux témoins.
1.1. Selon l'<ref-law>, la procédure de recours se fonde sur les preuves administrées pendant la procédure préliminaire et la procédure de première instance. L'<ref-law> règle les preuves complémentaires. Ainsi, la juridiction de recours administre, d'office ou à la demande d'une partie, les preuves complémentaires nécessaires au traitement du recours. Le droit d'être entendu, consacré par l'<ref-law>, garantit aux parties le droit de déposer des propositions relatives aux moyens de preuves (al. 1 let. e). Conformément à l'<ref-law>, il n'y a pas lieu d'administrer des preuves sur des faits non pertinents, notoires, connus de l'autorité ou déjà suffisamment prouvés. Cette disposition codifie, pour la procédure pénale, la règle jurisprudentielle déduite de l'art. 29 al. 2 Cst. en matière d'appréciation anticipée des preuves (arrêts 6B_505/2019 du 26 juin 2019 consid. 1.1.1; 6B_217/2019 du 4 avril 2019 consid. 3.1 et 6B_155/2019 du 29 mars 2019 consid. 2.1). Le refus d'instruire ne viole ainsi le droit d'être entendu des parties que si l'appréciation anticipée de la pertinence du moyen de preuve offert, à laquelle le juge a procédé, est entachée d'arbitraire (<ref-ruling> consid. 3.1.3 p. 435; <ref-ruling> consid. 3.3 p. 64; <ref-ruling> consid. 5.3 p. 236; arrêts 6B_505/2019 précité consid. 1.1.1 et 6B_155/2019 précité consid. 2.1).
1.2. Le recourant reproche à la cour cantonale d'avoir rejeté sa requête tendant à l'audition de F._, une amie de la plaignante, qui aurait entendu celle-ci " se vanter d'avoir menti aux autorités pour envoyer [le recourant] en prison " (mémoire de recours, p. 3). La cour cantonale a refusé l'audition au motif qu'il s'agissait d'un témoin indirect et qu'une autre amie de la plaignante, G._, qui avait assisté à la même conversation, avait été entendue en qualité de témoin. En affirmant que les deux témoins n'ont pas assisté à la même conversation, le recourant se contente d'opposer sa propre version des faits à celle de la cour cantonale. Ce faisant, il formule une argumentation appellatoire, partant irrecevable.
1.3. Le recourant reproche ensuite à la cour cantonale d'avoir refusé le témoignage de sa thérapeute au motif que celle-ci avait fourni une attestation de suivi et qu'il avait fait l'objet d'une expertise psychiatrique. Il invoque à cet égard le fait que l'expertise ne s'est déroulée que sur trois heures, dont seulement une en présence de l'experte. Il se plaint également du fait que les experts se seraient " servis de tests obsolètes pour [lui] attribuer 'un intérêt pour le morbide' " (mémoire de recours, p. 4).
Le recourant ne démontre pas que l'appréciation anticipée de la preuve à laquelle s'est livrée l'autorité précédente serait arbitraire. Il n'explique en particulier pas en quoi l'audition de sa thérapeute serait susceptible d'apporter de nouveaux éléments déterminants, par rapport à son attestation écrite. A cet égard, les diverses critiques que le recourant formule en lien avec l'expertise - qui ne ressortent pas de l'arrêt attaqué - ne sont pas pertinentes.
1.4. Au vu de ce qui précède, la cour cantonale était fondée à écarter les réquisitions de preuve formulées devant elle par le recourant.
Pour le surplus, dans la mesure où le recourant se contente de critiquer de manière générale, la " non-prise en considération des témoins apportés par [lui] ", il ne formule pas de grief recevable. Enfin, en tant qu'il soutient que les déclarations de la plaignante ont varié et se contredisent, son grief se confond avec celui d'arbitraire dans l'appréciation des preuves et l'établissement des faits, qui sera examiné par la suite (cf. consid. 2 et 3 infra).
2.
Le recourant se plaint d'une constatation et appréciation inexacte des faits et de l'arbitraire s'agissant de sa condamnation pour mise en danger de la vie d'autrui.
2.1. Le recourant reproche à la cour cantonale d'avoir fait preuve d'arbitraire en retenant la version des faits de l'intimée 2 et en considérant qu'une " certaine propension à la violence " pouvait lui être attribuée et qu'il " minimisait les faits ". Il souligne également quelques contradictions dans les déclarations de l'intimée 2.
2.2. Tout d'abord, c'est en vain que le recourant soutient que certains témoins l'ont décrit comme une personne calme. En effet, le recourant a lui-même admis avoir saisi l'intimée 2 à la mâchoire et avoir brièvement serré. En outre, la cour cantonale a considéré à juste titre qu'il y avait lieu de relativiser les témoignages de la mère du recourant et d'amis proches en raison des liens qui unissaient ces personnes au recourant. Enfin, comme le relève la cour cantonale, il ressort des déclarations d'une femme-témoin qui a assisté à une autre altercation entre le recourant et l'intimée 2, qu'au cours de celle-ci, le recourant s'était montré agressif et avait tenté de lui faire avaler une échographie; il avait ensuite poussé violemment la femme-témoin qui s'était interposée, et frappé à coups de pied le conjoint de cette dernière, qui s'était interposé à son tour, avant que la police intervienne. C'est en vain que le recourant soutient que ce fait s'est passé en 2014 et " fut exceptionnel dans le déroulement " (mémoire de recours, p. 4). La cour cantonale pouvait dès lors sans arbitraire retenir que le recourant était capable de comportements violents.
2.3. Il soutient ensuite que s'il avait réellement saisi l'intimée 2 à la gorge comme elle le décrit, des marques seraient apparues, ce qui ne ressort pas des rapports médicaux. Il ressort du jugement attaqué que l'intéressée a spontanément exposé qu'elle n'était pas sûre d'avoir consulté après cet épisode; pour le surplus, la cour cantonale a relevé qu'un étranglement ne laissait pas forcément des traces. Le recourant ne démontre pas en quoi cette appréciation serait arbitraire.
2.4. Enfin, le recourant soutient que l'intimée 2 a menti et soulève quelques divergences dans ses déclarations, notamment par rapport aux dates. Le recourant se borne ainsi à opposer, dans une démarche appellatoire et partant irrecevable, sa propre appréciation des preuves à celle de la cour cantonale, qui a considéré, pour sa part, que le récit de l'intimée 2 correspondait à la vérité, même si celle-ci avait donné des dates différentes, qu'elle ne voyait pas pourquoi l'intéressée aurait décrit les effets de la strangulation par des vomissements si ce n'était pas la vérité et que la version de celle-ci devait être retenue dès lors qu'aucun élément tangible ne permettait de remettre en cause sérieusement sa crédibilité (jugement attaqué, p. 25).
Le grief du recourant est rejeté dans la mesure où il est recevable.
3.
Le recourant reproche à la cour cantonale d'avoir établi les faits de manière arbitraire en lien avec les infractions de viol, tentative de viol et contrainte sexuelle.
3.1. Le recourant fait grief à la cour cantonale de ne pas avoir pris en compte un échange de messages entre l'intimée 2 et lui-même. Il ne démontre cependant pas en quoi ce message aurait été pertinent pour l'issue du litige (<ref-law>).
3.2. Le recourant critique ensuite le " ton " qu'aurait adopté le procureur en charge du dossier lors de son audition du 8 juin 2018, qui, selon lui, montrait qu'il était " déjà coupable à ses yeux " (mémoire de recours, p. 6). Il ne ressort pas du jugement entrepris que le recourant aurait invoqué ce grief dans son appel cantonal et le recourant ne le prétend d'ailleurs pas. Ainsi, ce grief, invoqué pour la première fois devant le Tribunal fédéral, est irrecevable (cf. <ref-ruling> consid. 8.4.3 p. 275; <ref-ruling> consid. 2.2. p. 4; <ref-law>).
3.3. Le recourant reproche en substance à la cour cantonale d'avoir arbitrairement retenu la version des faits de l'intimée 2. Il souligne quelques contradictions dans les déclarations de celle-ci, ainsi qu'un comportement ambivalent de sa part. Il affirme enfin qu'elle n'est pas " traumatisée " par les événements, dès lors qu'elle a refait sa vie et commencé une nouvelle relation avec un autre homme à peine plus d'un mois après un des épisodes d'" abus " et qu'elle était enceinte de plus de six mois au moment de l'audience du 16 juillet 2019.
Le raisonnement du recourant ne peut être suivi. D'une part, la cour cantonale ne s'est pas fondée seulement sur les déclarations de l'intimée 2 mais également sur les aveux partiels du recourant, sur des messages téléphoniques échangés entre les parties durant les faits, ainsi que sur le compte rendu du Dr H._, en présence duquel le recourant a évoqué les abus et a exprimé ses regrets. D'autre part, s'agissant des petites contradictions dans les déclarations de l'intimée 2, la cour cantonale a estimé à juste titre que la confusion de celle-ci par rapport à la chronologie des événements n'ôtait pas toute crédibilité à ses déclarations. Quant aux autres divergences mentionnées par le recourant, elles portaient sur des points de détail ou n'avaient rien à voir avec les infractions reprochées. Enfin, pour ce qui est du comportement ambivalent de l'intimée 2, notamment le fait qu'elle aurait demandé au recourant de lui dessiner un tatouage " un mois après le soi-disant abus " (mémoire de recours, p. 6), la cour cantonale a relevé que la relation entre les parties était " chaotique ", c'est-à-dire faite de ruptures et de reprises, et a estimé que ceci n'excluait nullement que l'intimée 2 ait été contrainte sexuellement à deux reprises. L'intéressée avait d'ailleurs expliqué " de manière crédible et convaincante qu'après les épisodes de violence, le recourant redevenait gentil et avenant avec elle " (jugement attaqué, p. 29). Le recourant ne démontre pas en quoi cette appréciation serait arbitraire et il n'apparaît pas que tel soit le cas. Pour le surplus, contrairement à ce que laisse entendre le recourant, et conformément à ce qu'a retenu la cour cantonale, le fait que l'intimée a commencé une nouvelle relation avec un autre homme et qu'elle serait enceinte de lui ne change rien au fait qu'elle a été profondément et durablement affectée dans sa santé, notamment psychique, à la suite des actes commis, dont un viol consommé, par le recourant.
3.4. Il s'ensuit que les autorités cantonales n'ont pas fait preuve d'arbitraire en retenant la version des faits de l'intimée. Le grief du recourant doit être rejeté dans la mesure où il est recevable.
4.
Invoquant une constatation et appréciation inexactes des faits, le recourant conteste enfin les faits qui lui sont reprochés sous B.f.
Il fait valoir que les versions de l'intimée 2 et de l'intimé 3 ont " chang[é] constamment lors de chaque audition " (mémoire de recours, p. 7). Ce faisant, il oppose à nouveau sa propre appréciation des preuves à celle de la cour cantonale qui a considéré que " les versions des plaignants [n'étaient] nullement contradictoires mais tout au plus légèrement nuancées " (jugement attaqué, p. 32). En outre, le recourant ne conteste pas la violation de domicile et admet dans son recours qu'il a sorti un couteau lorsque l'intimé 3 s'est approché. C'est donc en vain qu'il soutient qu'il avait " peur que l'intimé 3 soit quelqu'un de violent " et qu'il a eu une " réaction maladroite ", étant donné que, comme le relève la cour cantonale, on voit mal comment le recourant aurait pu se sentir menacé alors que c'est lui qui a fait irruption dans un appartement et a exhibé un couteau. Son grief est dès lors rejeté dans la mesure où il est recevable.
5.
Pour le surplus, le recourant ne remet pas en cause la qualification juridique des faits, ni la quotité de la peine qui lui a été infligée. Compte tenu du sort de ses griefs, il n'y a pas lieu d'examiner plus avant ces questions.
6.
Le recourant se plaint de deux mesures de substitution ordonnées, soit l'obligation de se soumettre à un suivi psychothérapeutique hebdomadaire chez sa psychiatre - qu'il considère comme " exagéré " - ainsi que l'obligation de se soumettre à des contrôles d'abstinence à l'alcool et aux stupéfiants. Il ne ressort pas du jugement attaqué que le recourant aurait invoqué de tels griefs dans son appel cantonal et celui-ci ne le prétend d'ailleurs pas, de sorte que ceux-ci sont irrecevables. Au demeurant, le recourant n'explique pas en quoi ces mesures violeraient le principe de la proportionnalité. S'agissant du suivi hebdomadaire avec sa psychiatre, il se contente de relever que l'expert a retenu, dans le rapport d'expertise, que " compte tenu de l'investissement du recourant dans son traitement, l'imposer n'offrirait pas de plus-value notable, voire pourrait être susceptible d'en diminuer l'efficacité " (pièce 57 du dossier pénal, p. 15 et 16). A cet égard, la cour cantonale a considéré que, même si les experts avaient estimé qu'il n'y avait pas d'intérêt à imposer un suivi, cette mesure devait être confirmée au vu de la gravité des infractions dont le risque important de récidive était redouté. En effet, une telle mesure était susceptible de favoriser une prise de conscience chez le recourant qui faisait défaut et s'avérait indispensable à l'octroi du sursis partiel, la seule volonté exprimée par le recourant de poursuivre ses consultations actuelles étant insuffisante. Le recourant ne critique pas le raisonnement de la cour cantonale et n'expose pas en quoi elle aurait violé le droit (<ref-law>).
7.
En définitive, le recours doit être rejeté dans la mesure où il est recevable. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit être rejetée (<ref-law>). Le recourant, qui succombe, supportera les frais judiciaires, qui seront fixés en tenant compte de sa situation financière, laquelle n'apparaît pas favorable (art. 65 al. 2 et 66 al. 1 LTF). Les intimés, qui n'ont pas été invités à se déterminer, ne sauraient prétendre à des dépens.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 14 octobre 2020
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
La Greffière : Thalmann